我希望不在SQL中执行update查询时,当变量为空时更新记录。但是,当变量被填满时,应该更新记录。
例如,数据库中的myAge字段当前的值为20(类型为int)。执行以下查询后,记录应该仍然是20。$age = '';
db_con->query("UPDATE info SET myAge = ".$age." WHERE account_id = 1");
Ps:我知道我可以检查变量是否为空PHP,但我想知道这是否可以在SQL中存档?
您可以在SQL中使用IF
构造来检查值是否为空:
$age = mysql_real_escape_string($age);
db_con->query("UPDATE info SET myAge = IF('".$age."' = '', myAge, ".$age.") WHERE account_id = 1");
如果传递的PHP变量为空,则设置旧的myAge
。
在PHP中检查更有意义,您可能会保存数据库查询。
将变量传递给数据库的方式有潜在的危险。如果你不知道mysql_real_escape_string
,现在就去查。
更好的是,开始使用一个为您转义值的数据库包装器
如果您只关心一个字段,我会将条件添加到where
中。
不清楚你说的空是什么意思。它可以是NULL
或一个空字符串。我猜myAge
是一个数字,所以NULL
将是"空":
UPDATE info
SET myAge = ".$age."
WHERE account_id = 1 AND myAge IS NOT NULL;
如果你愿意,你也可以在SET
中这样做:
UPDATE info
SET myAge = (CASE WHEN myAge IS NOT NULL THEN ".$age." END)
WHERE account_id = 1;
如果您有多个想要这样更新的列,这是必要的。我更喜欢CASE
而不是IF()
,因为CASE
是ANSI标准,可以在大多数数据库中使用。