【问题标题】:Accept "Null" value using COALESCE in update statement in MySQL and PHP在 MySQL 和 PHP 的更新语句中使用 COALESCE 接受“Null”值
【发布时间】:2015-06-25 04:01:09
【问题描述】:

我有多个<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 时,

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

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

问题

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

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

【问题讨论】:

    标签: php mysql coalesce


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      相关资源
      最近更新 更多