在 mysqli 准备好的语句中使用 null
在 mysqli 准备好的语句中,NULL 被转换为 '' (对于字符串)或 0 (对于整数)。 我想将它存储为真正的 NULL。 有什么办法可以做到这一点吗?
In a mysqli prepared statement, a NULL gets turned into '' (in the case of a string) or 0 (in the case of an integer). I would like to store it as a true NULL. Is there any way of doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
对于任何因为在
WHERE
语句中绑定 NULL 时遇到问题而查看此内容的人,解决方案是这样的:有一个 mysql NULL 安全运算符:
<=>
示例:
For anyone coming looking at this because they are having problems binding NULL in their
WHERE
statement, the solution is this:There is a mysql NULL safe operator that must be used:
<=>
Example:
可以将 true NULL 值绑定到准备好的语句(阅读 这个)。
因此它必须类似于:
这应该将 NULL 值插入数据库。
It's possible to bind a true NULL value to the prepared statements (read this).
Thus it'll have to be something like:
This should insert a NULL value into the database.
对关于
mysqli_stmt::bind_param
的 PHP 文档的注释表明传入NULL
并不容易。评论中提供的解决方案做了一些对准备好的语句进行预准备工作,将每个具有 PHP
null
值的参数的"?"
标记替换为"NULL"
。 然后使用修改后的查询字符串。以下函数来自用户评论80119 :
(这并不是我真正想要的编码风格,但如果它有效的话......)
The comments to the PHP documentation on
mysqli_stmt::bind_param
indicate that passing inNULL
was not easily possible.Solutions offered in the comments do some pre-preparation work on the prepared statement, replacing the
"?"
markers with"NULL"
for every param that has the PHPnull
value. The modified query string is then used.The following function is from user comment 80119:
(It's not really the coding style I would have done it in, but if it works...)
我将所有参数存储在一个数组中,并使用
array_shift($myArray)
将它们传递到bind_param
函数中。 NULL 就这样被接受。I store all parameters in an array and pass them in
bind_param
function usingarray_shift($myArray)
. NULL is accepted like that.