当我通过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传递给整数列?
为了简化我的问题(因为我认为它不相关),我省略了通过$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)
这并不能解决我的问题,但它确实回答了这个问题