当在SQL中执行更新查询时,当变量为空时,我希望而不是更新记录。但是,当变量被填充时,应该更新记录。
因此,例如,数据库中的myAge字段当前的值为20 (类型为int)。执行以下查询后,记录仍应为20。
$age = '';
db_con->query("UPDATE info SET myAge = ".$age." WHERE account_id = 1");Ps:我知道我可以用PHP检查变量是否为空,但我想知道这是否可以在SQL中存档?
发布于 2015-10-03 12:44:29
您可以在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的事,现在就查一查。
更好的是,开始使用一个为您转义值的数据库包装器。
发布于 2015-10-03 13:00:20
如果您只关心一个字段,我会将条件添加到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标准,在大多数数据库中都是可用的。
https://stackoverflow.com/questions/32922551
复制相似问题