将行上的列的值设置回NULL

时间:2014-11-24 21:19:38

标签: php mysql

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

<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表和带有新值的第二列,除非select没有更改<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();


}

3 个答案:

答案 0 :(得分:0)

在更新中使用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

答案 1 :(得分:0)

如果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-&GT;执行();

答案 2 :(得分:0)

select上进入mysql,使用IFNULL(rd_warranty,0)最佳做法!