php 有空语句,php – 在条件中编写一个带有可空值的预准备语句

有没有办法编写一个准备好的语句,其中一个值与条件中的另一个值进行比较,我不知道该值是否为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,mysql,pdo,prepared-statement,nullable

来源: https://codeday.me/bug/20190623/1266063.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值