如果在UPDATE查询(sql)中var为空,则保留当前值


Leave current value if var is empty in a UPDATE query (sql)

我希望在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标准,可以在大多数数据库中使用。