【问题标题】:Integer inserting as 0 instead of NULL整数插入为 0 而不是 NULL
【发布时间】:2013-08-21 21:40:35
【问题描述】:

当我通过 PHP 准备语句将 NULL 插入 MYSQL INTEGER 字段时,它插入为 0。

我搜索了类似的问题并更新了我的代码,但问题仍然存在。

在我的代码中,如果一个文本框向 PHP 发送一个空字符串; PHP 将其转换为 NULL 即。

$v3 = (strlen($v3)<1 ) ? NULL : $v3;

例如,UNIT 列中的结果可能为 NULL。

准备语句

$stmt = $mysqli->prepare("INSERT INTO address ( `PERSON`, `TYPE`, `UNIT`, `STREET_NUM`, `STREET`, `STREET_TYPE`, `SUBURB`, `STATE` ) VALUES (?,?,?,?,?,?,?,?)"));

将参数绑定为整数

$stmt->bind_param('isiissss',$p, $add_type[$a], $unit[$a], $street_num[$a], $street_name[$a], $street_type[$a], $suburb[$a], $state[$a]);

在 MYSQL 中,address.unit 为 NULLABLE,没有默认值。

如果我直接插入表格并省略单位列的值;存储 NULL。符合我的预期。

如果将列的数据类型指定为“i”(整数),我怀疑 bind_param 函数会将 NULL 更改为 0,因为传递给 VARCHAR 列的 NULL 存储为 NULL。 我是否正确,如果正确,我应该如何将 NULL 传递给整数列?

【问题讨论】:

  • 该表的列可能设置为not null,默认为0。您可以删除not null 并将默认设置为null。如果表设置正确,null 是一个有效值。
  • 您的表格结构应该包含一个not null 开关。你在你的专栏里设置了这个吗?
  • 这应该回答你的问题stackoverflow.com/questions/4920873/…
  • @RiggsFolly 不,在那个链接中,他们正在传递一个 NULL 文本字符串,即“NULL”,而我正在传递一个 NULL。同样如上所述,“传递给 VARCHAR 列的 NULL 存储为 NULL”,这意味着 PHP 存储 null 的方式不是问题
  • @rosscosack 是的,那是他们的错误。他们不应该通过'NULL' 他们应该通过NULL

标签: php mysql null int prepared-statement


【解决方案1】:

为了简化我的问题(并且因为我认为它不相关),我省略了通过 $mysqli->real_escape_string 函数的值,经过一些测试,我发现它将 NULL 转换为空字符串

$test = "";
$test = (strlen($test)<1 ) ? NULL : $test;
var_dump($test); // null
echo "<br>";
$test = $mysqli->real_escape_string($test);
var_dump($test);  // string '' (length=0)

这并不能解决我的问题,但它确实回答了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-12
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    相关资源
    最近更新 更多