爬坑系列之Yii下PDO参数化查询

2024-05-29 06:18
文章标签 参数 查询 系列 pdo yii

本文主要是介绍爬坑系列之Yii下PDO参数化查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上周五一整天焦头烂额,一直在坑里爬。折腾了一整天也没爬出来,到最搞得自己非常急躁。
今天突然想起这个事情,又拿出来继续爬。结果还碰上了许多问题,个人电脑没跑过yii,本机的php版本只有5.3。yii2运行必须得5.4版本以上…加上自己网速渣得不行,前后折腾了半个多小时才把环境搭好…

正题
(文章结尾有结论,可以跳过正文)
yii2中有一个查询自己构建sql语句查询数据库的方法findBySql(),项目sql语句有点复杂,迫于无奈,使用findBySql()。
findBySql(),中支持pdo绑定参数防注入。但是第二个参数必须是数组。我构建的第一个sql语句是这样的(因为家里没有项目代码,临时编写一个简单sql)

$aaa  = array('menuid'=>'69','orderid'=>'1','adfa'=>'112121');$result = Orders::findBySql('SELECT userid FROM Orders WHERE menuid = :orderid and send_status = :orderid and menucount = :orderid and orderid = :menuid',$aaa);
$result = $result->asArray()->all();

上面正常运行。代码绑定了4个参数,3个重复。实际绑定的为2个。此时,传入数组中有3个值。
注意:这里插一句,网上看到许多文章,说绑定的参数名称不能一样,会报错,这里不知道是yii的原因还是其他,测试没有报错,没有问题,正常跑,数据也正确。

下面是我的第二个sql

$aaa  = array('menuid'=>'69','orderid'=>'1','adfa'=>'112121');
$result = Orders::findBySql('SELECT userid FROM Orders WHERE menuid = :orderid  and orderid = :menuid and',$aaa);
$result = $result->asArray()->all();

上面代码绑定两个参数,但是传递的数组中有3个值。此时报错

SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

大致意思是,绑定参数不匹配。

此时如果将数组中,去掉一个值,便能正常运行。

多次测试后得出结论
1.findBySql()中的第二参数,传入的数组值的个数不能比绑定的参数多。多会报错,正常的做法是,绑定多少个传入多少个。
2.当同一个参数需要多次绑定的时候,可以只传一次值,例如我第一个sql。(这种特殊情况,可能会在下一次更新有变动。)
其实第二种情况也很常见,比如在select中做判断查询多个状态,但是有时间限制时,就会绑定多个重复参数。

这篇关于爬坑系列之Yii下PDO参数化查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1012871

相关文章

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

MySQL多列IN查询的实现

《MySQL多列IN查询的实现》多列IN查询是一种强大的筛选工具,它允许通过多字段组合快速过滤数据,本文主要介绍了MySQL多列IN查询的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析与优化1.

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固 通俗易懂版)

《MySQL中实现多表查询的操作方法(配sql+实操图+案例巩固通俗易懂版)》本文主要讲解了MySQL中的多表查询,包括子查询、笛卡尔积、自连接、多表查询的实现方法以及多列子查询等,通过实际例子和操... 目录复合查询1. 回顾查询基本操作group by 分组having1. 显示部门号为10的部门名,员

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

解读docker运行时-itd参数是什么意思

《解读docker运行时-itd参数是什么意思》在Docker中,-itd参数组合用于在后台运行一个交互式容器,同时保持标准输入和分配伪终端,这种方式适合需要在后台运行容器并保持交互能力的场景... 目录docker运行时-itd参数是什么意思1. -i(或 --interactive)2. -t(或 --