整数插入为0而不是NULL

时间:2013-08-19 23:53:24

标签: php mysql null int prepared-statement

当我通过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且没有默认值。

如果我直接插入表中并省略了unit列的值;存储NULL。这是我的预期。

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

1 个答案:

答案 0 :(得分:0)

为了简化我的问题(因为我认为它不相关)我省略了通过$ mysqli-&gt; 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)

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