将行上的列值设置回 NULL


Set value of a column on a row back to NULL

>我有一个包含行和列的小表

<tr>
    <td>Warranty</td>
    <td><?php echo ($admrmadetrow['rd_warranty'] == 1 ? "YES" : ' '); ?></td>
    <td><select name="rd_warranty" data-placeholder="rd_warranty" class="form-control">
            <option></option>
            <option value="1">YES</option>
            <option value="0">NO</option>
          </select></td>
</tr>

第一列显示只是一个名称,第二列是我的MySQL表中的值,最后一列您可以选择值Yes(1)和No(0),并且在提交表单时,它必须使用新值更新mysql表和第二列,除非选择没有更改<option></option>

我面临的问题是当第二列Yes并且必须更改为No它不更新时。我知道0NULL一样,但是您如何管理此问题并将1更改为0

我没有收到它提交的任何错误,但保持在是(1)。

有人可以帮助我吗?

编辑:

这是我更新数据库的代码

foreach (array_filter($_POST) as $key => $value){
    $update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = ? WHERE r_nr = ? AND rd_artikel_code = ?");
    $update_rma_detail_stmt->bindParam(1, $value);
    $update_rma_detail_stmt->bindParam(2, $getadmrmaid);
    $update_rma_detail_stmt->bindParam(3, $artcode);
    $update_rma_detail_stmt->execute();

}

如果 HTML 代码中的字段值为空,您的 POST 请求将使用空字符串值(如 '')生成。要在预准备语句中设置 NULL,您必须使用 bindValue 函数,您的代码将如下所示:

foreach ($_POST as $key => $value){
$update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = ? WHERE r_nr = ? AND rd_artikel_code = ?");
/*you can use "empty($value)" or "$value==''" condition*/
if(empty($value)){
    $update_rma_detail_stmt->bindValue(1, null);
}else{
    $update_rma_detail_stmt->bindParam(1, $value);
}
$update_rma_detail_stmt->bindParam(2, $getadmrmaid);
$update_rma_detail_stmt->bindParam(3, $artcode);

}$update_rma_detail_stmt->execute();

在更新中使用 CASE,因为您基本上需要在选择 0 时更新 NULL。类似
的东西

$update_rma_detail_stmt = $dbh->prepare("UPDATE rma_detail SET $key = CASE WHEN ? = 0 then NULL else ? END WHERE r_nr = ? AND rd_artikel_code = ?");

注意:这里的答案是使用 CASE 语句,我不确定上面的代码 100%,因为您使用的是占位符 (? 对于价值观,我对此不是很熟悉。

有关CASE的更多详细信息,请访问:http://dev.mysql.com/doc/refman/5.0/en/case.html

select mysql 时,使用IFNULL(rd_warranty,0)最好的练习!