如果Post值不为空,则更新数据库。

3

我正在尝试更新用户表,仅当 $_POST[value] 不为 null 时。如果为 null,则应保留列中已有的值。

$query = "UPDATE `Users` 
SET FirstName = COALESCE(:firstName, FirstName), LastName = ISNULL(:lastName, LastName), City = :city, State = :state WHERE Email = :email";
$stmt = $dbh->prepare($query);
$stmt->bindValue(':firstName', $firstName);
$stmt->bindValue(':lastName', $lastName);
$stmt->bindValue(':city', $city);
$stmt->bindValue(':state', $state);
$stmt->bindValue(':email', $email);
$stmt->execute();

我尝试使用COALESCE函数替换FirstName列的值,使用ISNULL函数替换LastName列的值。然而,COALESCE会将我的值替换为空白(NULL),这正好与我想要的相反;而ISNULL似乎不起作用。

1个回答

5
假设您的意思是用空白 ('') 替换 FirstName,那么尝试使用 NULLIF:
UPDATE `Users` 
SET FirstName = COALESCE(NULLIF(:firstName,''), FirstName) ...

我假设POST请求是空的。
祝好运。

同样的问题。你的假设是正确的。输入框 ($_POST['firstName']) 被取到变量 $firstName 中,当我点击提交按钮时,如果 firstName 的值为空,数据库会更新为空白。 - Bhavik P.
@user1964239 -- 你看到我的编辑了吗 -- 我最初不小心使用了IFNULL,但现在改成了NULLIF。希望这有所帮助! - sgeddes
搞定了。非常感谢你。我真的以为 COALESCE 本身就可以解决问题。如果可以的话,你能简要解释一下为什么它不起作用吗? - Bhavik P.
@user1964239 -- 没关系,COALESCE 只检查 NULL 值,不检查空白值。这就是你需要使用类似 NULLIF 的东西的地方。祝你好运。 - sgeddes
哦,我明白了。一直以来我都以为当我们提交空白时,它实际上会提交NULL,但看来不是这样。再次感谢。 - Bhavik P.
太好了,最佳答案!! - Kakitori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接