php - 将空值传递给 mysql 数据库

标签 php mysql null

用户填写表单,如果他们选择不填写不需要的字段,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/

相关文章:

java - 为什么静态字段没有及时初始化?

Java:检查日期选择器是否有值错误

php - 无法跳转到第 8 行 .../tag.php 中 MySQL 结果索引 6 上的第 0 行

php - 如何动态命名生成的 PHP 表格单元格

php - PHP 类中的可见性重要吗?为什么?

python - 如何使用 MYSQL/Python/Django 对表中包含相似元素的行进行分组?

javascript - 随机图像服务

php - PHP 数据库搜索表单的问题

mysql - 从另一个表中添加具有初始值的列

java - Dagger2 子注入(inject)项为空