Php 整数插入为0而不是NULL

Php 整数插入为0而不是NULL,php,mysql,null,int,prepared-statement,Php,Mysql,Null,Int,Prepared Statement,当我通过PHP准备的语句将NULL插入MYSQL整数字段时,它将作为0插入 我已经搜索了类似的问题并更新了代码,但仍然存在问题 在我的代码中,如果一个文本框向PHP发送一个空字符串;PHP将其转换为NULL ie $v3 = (strlen($v3)<1 ) ? NULL : $v3; 将参数绑定为整数 $stmt->bind_param('isiissss',$p, $add_type[$a], $unit[$a], $street_num[$a], $street_name[$

当我通过PHP准备的语句将NULL插入MYSQL整数字段时,它将作为0插入

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

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

$v3 = (strlen($v3)<1 ) ? NULL : $v3;
将参数绑定为整数

$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是可空的,没有默认值

如果我直接插入到表中,并省略单位列的值;存储空值。这是我预料到的

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

为了简化我的问题(而且因为我认为这不相关),我省略了传递$mysqli->real\u escape\u字符串函数的值,经过一些测试,我发现它将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)
$test=”“;
$test=(strlen($test)real\u escape\u string($test);
var_dump($test);//字符串“”(长度=0)

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

该表的列可能设置为
非空
,默认值为
0
。您可以删除
非空
,并将默认值设置为空。如果表设置正确,
null
是一个有效值。您的表结构应该包括一个
not null
开关。您在列上设置了它吗?这应该可以回答您的问题@RiggsFolly no,在该链接中,他们正在传递一个null文本字符串,即'null',我在传递null。如上所述,“传递给VARCHAR列的null存储为null”这意味着PHP的存储方式没有问题null@rosscosack是的,那是他们的错误。他们不应该传递
'NULL'
他们应该传递
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)