gpt4 book ai didi

php - 在 MySQL 和 PHP 的更新语句中使用 COALESCE 接受 "Null"值

转载 作者:行者123 更新时间:2023-11-29 22:32:06 25 4
gpt4 key购买 nike

我有多个<forms>每个都有 1 个表单元素(例如文本框)。但所有这些元素的值都在一个 MySQL 表中。可以通过单独提交相应的表单来单独修改(即插入/更新/删除)这些元素。请参阅this fiddle 来了解 html 结构的基本概念。

HTML

<form class="form-horizontal" id="form1" method="post">
<div class="form-group">
<label class="col-xs-3 control-label">Form 1</label>
<div class="col-xs-10">
<input class="form-control" type="text" name="element1" maxlength="50" />
<br>
<button type="button" class="btn btn-default btn-xs">Cancel</button>
<button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
</div>
</div>
</form>


<form class="form-horizontal" id="form2" method="post">
<div class="form-group">
<label class="col-xs-3 control-label">Form 2</label>
<div class="col-xs-9">
<input class="form-control" type="text" name="element2" maxlength="50" />
<br>
<button type="button" class="btn btn-default btn-xs">Cancel</button>
<button type="submit" class="btn btn-primary btn-xs">Save Changes</button>
</div>
</div>
</form>

PHP

if(isset($_POST['element1'])){
if(empty($_POST['element1'])){
$element1= ''; //Update empty value if $_POST is empty
}
else{
$element1= $_POST['element1'];
}
}
else{
$element1= null;
}

if(isset($_POST['element2'])){
if(empty($_POST['element2'])){
$element2= ''; //Update empty value if $_POST is empty
}
else{
$element2= $_POST['element2'];
}
}
else{
$element2= null;
}

$sql_update = "UPDATE element_table SET element1=COALESCE(NULLIF('" . mysql_real_escape_string($element1) . "',''), element1), element2=COALESCE(NULLIF('" . mysql_real_escape_string($element2) . "',''),element2) WHERE id=01";

MySQL 表

________________________________________________________________________________
| id | element1 | element2 | element3 | element4 | ... |
________________________________________________________________________________
| 01 | 1 | 2 | 3 | 4 | ... |

要求

  1. 当我提交表单 1 时,未设置 $_POST['element2'],因此我不想更改 element2。更新查询仅修改 element1。
  2. 当我提交 #form1 时,

    a.如果 $_POST['element1'] 不为空,则更新 POST 变量中的值。

    b.如果 $_POST['element1'] 为空,则将 null 值更新为 db。即将该列留空。

问题

第 1 点和第 2.a 点。工作正常,但是我无法完成第 2.b 点。也许我以错误的方式使用 COALESCE 。有人可以告诉我如何在仍然使用 COALESCE 的同时将空值更新到数据库吗?谢谢

附注由于某些原因,数据库设计无法更改,我无法在此透露。

最佳答案

在子查询中,添加UNION SELECT 'default' LIMIT 1:

UPDATE `table` SET `f1`=(
SELECT `f2` FROM `table2` WHERE `f3` = 'value'
UNION SELECT 0
LIMIT 1
);

这就是我刚刚解决类似问题的方法。

关于php - 在 MySQL 和 PHP 的更新语句中使用 COALESCE 接受 "Null"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29713816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com