首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果var在更新查询(sql)中为空,则保留当前值。

问如果var在更新查询(sql)中为空,则保留当前值。
EN

Stack Overflow用户
提问于 2015-10-03 12:27:28
回答 2查看 1.9K关注 0票数 2

当在SQL中执行更新查询时,当变量为空时,我希望而不是更新记录。但是,当变量被填充时,应该更新记录。

因此,例如,数据库中的myAge字段当前的值为20 (类型为int)。执行以下查询后,记录仍应为20。

代码语言:javascript
复制
$age = '';

db_con->query("UPDATE info SET myAge = ".$age." WHERE account_id = 1");

Ps:我知道我可以用PHP检查变量是否为空,但我想知道这是否可以在SQL中存档?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-03 12:44:29

您可以在SQL中使用IF构造来检查该值是否为空:

代码语言:javascript
复制
$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的事,现在就查一查。

更好的是,开始使用一个为您转义值的数据库包装器。

票数 2
EN

Stack Overflow用户

发布于 2015-10-03 13:00:20

如果您只关心一个字段,我会将条件添加到where中。

你所说的“空”是什么意思还不清楚。可以是NULL,也可以是空字符串。我猜myAge是一个数字,所以NULL是“空”的:

代码语言:javascript
复制
UPDATE info
    SET myAge = ".$age."
    WHERE account_id = 1 AND myAge IS NOT NULL;

您也可以在SET中这样做,如果您愿意的话:

代码语言:javascript
复制
UPDATE info
    SET myAge = (CASE WHEN myAge IS NOT NULL THEN ".$age." END)
    WHERE account_id = 1;

如果您有多个要像这样更新的列,这是必要的。我更喜欢CASE而不是IF(),因为CASE是ANSI标准,在大多数数据库中都是可用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32922551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档