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

时间:2015-10-03 12:27:28

标签: php sql

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

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

 var uniqueInOrder = function (iterable)
    {debugger;
      return [].filter.call(iterable,(function (a, i) { return iterable[i - 1] !== a }));
    }
    console.log(uniqueInOrder("aaaaaBBBDSJJJJ"))

Ps:我知道我可以通过PHP检查变量是否为空,但我想知道如果这可以在SQL中实现吗?

2 个答案:

答案 0 :(得分:2)

您可以在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,请立即查看。

更好的是,开始使用为您逃避值的数据库包装器。

答案 1 :(得分:1)

如果您只关心一个字段,我会将条件添加到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标准,并且在大多数数据库中都可用。