如何插入NULL值

时间:2011-11-01 13:12:20

标签: php mysql

我想在包含电话区号的表格列中插入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

8 个答案:

答案 0 :(得分:5)

您的陈述需要看起来像

UPDATE ... SET area_code = NULL ...

如果您正在将PHP null转换为字符串,那么它只会转换为"",即空字符串。您需要将值更改为"NULL"(字符串“NULL”),而不仅仅是NULL(类型null)。在将它们插入SQL查询之前,您还应该认真地逃避/清理/验证您的值,您可以全身心地进行SQL注入。

答案 1 :(得分:3)

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

  

NULL始终转换为空字符串。

当你构建$string[]时,你不能只是连接你的$value,否则你的空值将被转换为空字符串,它们会转换回零。你必须做一个像以下的测试:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

NULL总是转换为空字符串。

尝试

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

因为null不是字符串

答案 4 :(得分:1)

试试这样:

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

答案 5 :(得分:1)

那是因为你将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. 切换到支持预准备语句的库(恕我直言,最简单,最可靠的解决方案):

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

答案 6 :(得分:1)

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

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

然后将正确创建字符串:

area_code=NULL

代表UPDATE声明。

答案 7 :(得分:1)

如果您的数据库表列数据类型定义为int / float / numeric,则它取0而不是NULL。因为你正在做的是,使它成为与int / float的列定义不匹配的字符串。