如何插入NULL值


How do I insert a NULL value

我想在包含电话区号的表列中插入一个NULL值,该区号具有以下属性:

mediumint unsigned DEFAULT NULL

在我的PHP脚本中,我进行了以下检查,将空字符串转换为NULL值:

if($_POST['area_code'] == "") $_POST['area_code'] = NULL;
// clean POST
foreach($_POST as $field => $value)
{
 $string[] = $field."=".$value;
}
$sql = "UPDATE Buyer SET ".implode(", ", $string)." WHERE user='$user'";

但是,我得到的是0而不是NULL值。如何插入NULL

您的语句需要看起来像

UPDATE ... SET area_code = NULL ...

如果像这样将PHP null强制转换为字符串,那么它只会强制转换为"",即空字符串。您需要将值更改为"NULL"(字符串"NULL"(,而不仅仅是NULL(类型null(。在将值插入SQL查询之前,您还应该认真地对其进行转义/消毒/验证,因为您对SQL注入非常开放。

来源http://php.net/manual/en/language.types.string.php

NULL总是转换为空字符串

当您构建$string[]时,您不能只是连接您的$value,否则您的null将转换为空字符串,这些字符串将转换回零。你必须做一个测试,比如:

$value == '' ? 'NULL' : $value

将PHP NULL更改为MySQL NULL(字符串(:

if($_POST['area_code'] == '') $_POST['area_code'] = 'NULL';

NULL始终转换为空字符串。

尝试

if($_POST['area_code'] == "") $_POST['area_code'] = "NULL";

因为null不是字符串

这样试试:

if($_POST['area_code'] == "") $_POST['area_code'] = "NULL";

对于初学者来说,您应该转义这些发布的值(也许您已经转义了(。其次,PHP中的NULL总是转换为空字符串(http://php.net/manual/en/language.types.string.php)。相反,使用:

$_POST['area_code'] = 'NULL';

然后将正确创建字符串:

area_code=NULL

用于您的UPDATE声明。

如果您的数据库表列数据类型定义为int/foat/numeric,则它采用0而不是NULL。因为您正在做的是,将其作为与int/foat列定义不匹配的字符串。

这是因为您将NULL强制转换为字符串:

$field."=".$value

你有两个选择:

  1. 为NULL值编码一个异常:

    if( is_null($value) ){
        $string[] = $field . '=NULL';
    }else{
        // Please note I've also added proper string escaping
        $string[] = $field . "='" . mysql_real_escape_string($value) . "'";
    }
    
  2. 切换到支持准备语句的库(IMHO,最简单、最可靠的解决方案(:

    $string[] = $field . '=?';
    $params[] = $value;