php – 在条件中编写一个带有可空值的预准备语句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 在条件中编写一个带有可空值的预准备语句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1945字,纯文字阅读大概需要3分钟。
内容图文
![php – 在条件中编写一个带有可空值的预准备语句](/upload/InfoBanner/zyjiaocheng/796/14a85d028e3b4243943965abcb64490c.jpg)
有没有办法编写一个准备好的语句,其中一个值与条件中的另一个值进行比较,我不知道该值是否为NULL.
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` = :a2
如果我将这个准备好的陈述与a1 =>一起使用null和a2 => 42,然后得到的查询将是:
SELECT `foo` FROM `bar` WHERE `a1` = NULL AND `a2` = '42'
当然,这不是我想要的.在那种情况下我需要这个:
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` = '42'
^^
a1和a2都可以为空.我不想定义4个准备语句:
-- I would use this, if both values are not null
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` = :a2
-- and this, if the expected value of a1 is null
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` = :a2
-- and this, if the expected value of a2 is null
SELECT `foo` FROM `bar` WHERE `a1` = :a1 AND `a2` IS NULL
-- and this, if I would expect both values to be null
SELECT `foo` FROM `bar` WHERE `a1` IS NULL AND `a2` IS NULL
解决方法:
MySQL提供了一个零安全比较< => (太空飞船)操作符.这指定了将返回TRUE或FALSE的相等比较,并且当任一操作数为NULL时不会返回NULL.
作为示范:
SELECT NULL=NULL
, NULL<=>NULL
, 1=NULL
, 1<=>NULL
, 1=0
, 1<=>0
, 1=1
, 1<=>1
返回:
NULL=NULL NULL<=>NULL 1=NULL 1<=>NULL 1=0 1<=>0 1=1 1<=>1
--------- ----------- ------ -------- ------ ----- ------ -----
(NULL) 1 (NULL) 0 0 0 1 1
该比较操作基本上是简写.返回:
a <=> b
相当于从中返回
( a = b OR ( a IS NULL AND b IS NULL ) )
要回答您提出的问题,我们可以使用NULL安全比较< =>来编写语句. (宇宙飞船)操作符,像这样:
SELECT `foo`
FROM `bar`
WHERE `a1` <=> :a1
AND `a2` <=> :a2
或者,对于更符合ANSI标准且可移植的方法,我们可以在不使用MySQL特定运算符的情况下实现相同的结果,如下所示:
SELECT `foo`
FROM `bar`
WHERE ( `a1` = :a1 OR ( `a1` IS NULL AND :a1d IS NULL ) )
AND ( `a2` = :a2 OR ( `a2` IS NULL AND :a2d IS NULL ) )
请注意,我们需要将每个绑定值的值传递两次.过去,PDO不允许对绑定占位符进行多次引用. (不确定在最新版本的PDO中是否仍然如此.)如上所示,解决方法是在语句中使用四个不同的占位符,并为:a1和:a1d提供相同的值.)
内容总结
以上是互联网集市为您收集整理的php – 在条件中编写一个带有可空值的预准备语句全部内容,希望文章能够帮你解决php – 在条件中编写一个带有可空值的预准备语句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。