使用MySqli向MySql记录插入NULL值

3
我的页面使用ajax向php脚本发送数据。其中一个变量是:$product_disc。 现在我在脚本中进行了一个小测试,结果表明$product_disc为空。测试如下:
if ($product_disc == null)
 {$test="null";}
 else {$test="not null";}

我让我的代码将$test返回给ajax调用过程:
$return_array['success'] = array ('test' => $test);

使用Firebug工具,我发现ajax响应中含有:"test":"null"
因此我得出结论:$product_disc的值为null。
现在,在我的脚本中,我正在使用以下代码将数据插入到MySQL数据库中:
$stmt = mysqli_prepare($link, "INSERT INTO set_products (id,discount) VALUES (NULL , ?)");
mysqli_stmt_bind_param($stmt, "i", $product_disc);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

查询正在执行,但插入的值为0而不是NULL!只有在明确添加:$product_disc=null; 在MySqli语句之前,插入的值才为NULL。
为什么会这样?NULL和null之间有什么区别?我遵循了stackoverflow中的答案,希望能轻松插入NULL,但随之而来的是这个问题...
谢谢!
PS @stackoverflow团队 - 您的拼写检查字典无法识别stackoverflow这个单词!

2
你将product_disc准备为整数,null不是整数。它被转换为0。 - Khez
@Israel:拼写检查器在你的浏览器中,哈哈) - zerkms
@Israel 已完成并提供了小费。 - Khez
@zerkms - 你每天都能学到一些新东西 :) - Israel
@Israel 请举一个你将变量声明为 null 的例子。 - Khez
显示剩余2条评论
1个回答

4

您准备的product_disc是整数类型,空值不是整数,它会被转换为0。

虽然将其准备为字符串类型可以解决您的问题,但这样做会破坏准备mysql语句的目的。考虑采用以下解决方案:

mysqli_stmt_bind_param($stmt, $product_disc==null?'s':'i', $product_disc);

谢谢Khez,我会采用你的建议,但是你知道为什么当我明确将变量声明为NULL时,它的行为不同吗?在两种方式中,变量都是空的,但一种方式将其转换为整数,而另一种方式则没有。 - Israel
就像我在你的原帖中问的那样,你能提供代码吗?我相信这里一定有实际的原因。 - Khez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接