用户填写表单,如果他们选择不填写不需要的字段,php 会这样做:
if($_SESSION['numofchildren']=="")
$_SESSION['numofchildren']=null;
但是当我在 mysql 查询中使用 session 变量时,结果不是 null,而是 0。该列是允许 NULL 的 tinyint(4)。
为什么我得到的是 0 而不是 NULL?
最佳答案
可能是因为 PHP 不会将“null”转换为“NULL”。您可能只是插入一个空值。
INSERT INTO TABLE (`Field`) ('')
您可能将列的默认设置设置为“0”,这意味着它将插入一个 0,除非您指定一个数字或 NULL
INSERT INTO TABLE ('Field') (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)";
关于php - 将空值传递给 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1291180/