将null值传递给mysql数据库

时间:2009-08-18 00:21:13

标签: php mysql null

用户填写表单,如果他们选择不填写不需要的字段,请执行以下操作:

      if($_SESSION['numofchildren']=="")
         $_SESSION['numofchildren']=null;

但是当我在mysql查询中使用session变量时,结果不是null,而是0.该列是一个允许NULL的tinyint(4)。

为什么我得到0而不是NULL?

8 个答案:

答案 0 :(得分:9)

可能是因为PHP没有将'null'转换为'NULL'。您可能只是插入一个空值。

INSERT INTO TABLE (`Field`) ('')

您可能将列的默认值设置为“0”,这意味着除非您指定数字或NULL

,否则它将插入0
INSERT INTO TABLE ('Field') (NULL)

要解决此问题,请在执行查询之前检查Null值。

foreach($values as $key => $value)
{
     if($value == null)
     {
         $values[$key] = "NULL";
     }
}

我觉得准备好的陈述会有先见之明自动完成。但是,如果您正在进行内联语句,则需要添加更多内容。

MySQL值必须有引号,但Null不会。因此,您需要使用此

引用其他所有内容
foreach($values as $key => $value)
{
     if($value == null)
     {
         $values[$key] = "NULL";
     }
     else
     {
         // Real Escape for Good Measure
         $values[$key] = "'" . mysql_real_escape_string($value) . "'";
     }
}

然后,在创建语句时,请确保不要在任何值周围加上引号

$SQL = "INSERT INTO TABLE (Field) VALUES(".$values['field'].")";

变成

$SQL = "INSERT INTO TABLE (Field) VALUES("Test Value")";

$SQL = "INSERT INTO TABLE (Field) VALUES(NULL)";

答案 1 :(得分:3)

查看您要插入的表格的表格定义。该字段的“默认”值可能设置为零。

您正在使用的MySql版本在确定MySql如何处理Data Type Default Values时非常重要。

以上链接说:

  

对于数字类型,默认值为0,   除了整数或   用。声明的浮点类型   AUTO_INCREMENT属性,默认值   是序列中的下一个值。

答案 2 :(得分:1)

你们可能都是正确的,但我所要做的就是在空值周围加上引号。

  if($_SESSION['numofchildren']=="")
    $_SESSION['numofchildren']='NULL';

答案 3 :(得分:1)

几分钟前我遇到了同样的问题,但后来我发现了。在我的情况下,我使用NULL这样的引号之间的", '变量进行查询。让我解释一下自己...... 这就是你想要做的:

INSERT INTO `tbl_name` (`col1`, `col2`) VALUES (NULL,"some_value");

因此,如果您想使用NULL变量,则应为"NULL",如下所示:

$var1="NULL"; $var2="some_value";

现在,如果您想使用$var2,则可以在查询中输入'$var2',但不应对$var1执行相同操作:

INSERT INTO `tbl_name` (`col1`, `col2`) VALUES ($var1,'$var2');

如果您将$var1放在引号之间,则会0而不是NULL

答案 4 :(得分:1)

对我来说,将NULL var放在数据库中是行不通的,我使用了var char(2)。

所以我只做了2个查询。这样它将100%工作。对于你的例子,它将是:

if($_SESSION['numofchildren']=="")
{
$updatequery="
            UPDATE table 
            SET table1='$value', table2='$value2', numofchilrdrentable=(NULL)
            ";
}
else
{
$updatequery="
            UPDATE table 
            SET table1='$value', table2='$value2', numofchilrdrentable='$_SESSION[numofchildren]'
            ";

}
$updatequeryresult=mysql_query($updatequery) or die("query fout " . mysql_error() );    

编辑:var char - > var char(2)

答案 5 :(得分:0)

解析为字符串的

null变为0.尝试使用is_null ()先检查,然后在查询中放置NULL而不是0。

或者,尝试使用PDOPDO::prepare进行完美且黑客安全的查询。

答案 6 :(得分:0)

特别是当从网络表单发布值时,这非常令人困惑。我这样做:

我们假设您需要一个名为' numofchildren'的数据库字段。将接受可能的值:NULL,0,1,2 ..等,最多99个,默认值应为SQL NULL值。

SQL字段应定义为:

.. `numofchildren` INT( 2 ) NULL DEFAULT NULL

当你为NULL值插入数据时,你会传递像' NULL'之类的字符串。并在循环传入数据时查找它们。您刚刚转换为整数的其他值:

    foreach ($data as $v) {
$v['numofchildren'] = !isset($v['numofchildren']) || $v['numofchildren'] === 'NULL' ? '(NULL)' : (int) $v['numofchildren'];
                $q = "INSERT INTO tablename (numofchildren) VALUES ({$v['numofchildren']}) ";
    ...
            }

请注意,SQL查询中的{$ v [' numofchildren']}未被单引号括起,因为您不传递字符串而是整数(0,1,2 ..)或SQL NULL。 / p>

我认为它很简洁,涵盖了这个问题。

答案 7 :(得分:0)

如果要为DATABASE中的任何列设置NULL 首先 您应检查is_null中的该列

secuond:如果您想要的变量 设置为空代码,必须在双引号中插入“ null”,然后提交到数据库

如果将null设置为双引号(“”),则什么也不会发送,并且数据库将收到错误 例如:

function insert_to_db($var){
...
sql="INSERT INTO table VALUES($var)"
...
}

当您在代码中使用“”且不使用“” =>

function insert_to_db(null)// error : INSERT INTO table VALUES()
correct: 
function insert_to_db("null")//its ok