将null值传递给mysql数据库

Ian*_*ugh 4 php mysql null

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

      if($_SESSION['numofchildren']=="")
         $_SESSION['numofchildren']=null;
Run Code Online (Sandbox Code Playgroud)

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

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

Tyl*_*ter 9

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

INSERT INTO TABLE (`Field`) ('')
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO TABLE ('Field') (NULL)
Run Code Online (Sandbox Code Playgroud)

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

foreach($values as $key => $value)
{
     if($value == null)
     {
         $values[$key] = "NULL";
     }
}
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,准备好的陈述将有远见自动地做到这一点.但是,如果您正在进行内联语句,则需要添加更多内容.

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) . "'";
     }
}
Run Code Online (Sandbox Code Playgroud)

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

$SQL = "INSERT INTO TABLE (Field) VALUES(".$values['field'].")";
Run Code Online (Sandbox Code Playgroud)

变成

$SQL = "INSERT INTO TABLE (Field) VALUES("Test Value")";
Run Code Online (Sandbox Code Playgroud)

要么

$SQL = "INSERT INTO TABLE (Field) VALUES(NULL)";
Run Code Online (Sandbox Code Playgroud)


kar*_*m79 4

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

您使用的 MySql 版本对于精确确定 MySql 如何处理数据类型默认值非常重要。

上面的链接说:

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