在 mysqli 预准备语句中使用 nulls
2022-08-30 15:51:53
在 mysqli 预准备语句中,NULL 将转换为 ''(对于字符串)或 0(对于整数)。我想将其存储为真正的 NULL。有什么办法可以做到这一点吗?
在 mysqli 预准备语句中,NULL 将转换为 ''(对于字符串)或 0(对于整数)。我想将其存储为真正的 NULL。有什么办法可以做到这一点吗?
可以将真正的 NULL 值绑定到预准备语句(请阅读此内容)。
实际上,您可以使用mysqli_bind_parameter将 NULL 值传递到数据库。只需创建一个变量并将 NULL 值(参见它的手册页)存储到该变量并绑定它。反正对我来说效果很好。
因此,它必须是这样的:
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
// person is some object you have defined earlier
$name = $person->name();
$age = $person->age();
$nickname = ($person->nickname() != '') ? $person->nickname() : NULL;
// prepare the statement
$stmt = $mysqli->prepare("INSERT INTO Name, Age, Nickname VALUES (?, ?, ?)");
$stmt->bind_param('sis', $name, $age, $nickname);
?>
这应该将 NULL 值插入到数据库中。
对于任何因为在他们的语句中绑定NULL时遇到问题而来查看此内容的人来说,解决方案是这样的:WHERE
必须使用一个 mysql NULL 安全运算符:
<=>
例:
<?php
$price = NULL; // NOTE: no quotes - using php NULL
$stmt = $mysqli->prepare("SELECT id FROM product WHERE price <=> ?"); // Will select products where the price is null
$stmt->bind_param($price);
?>