爬坑系列之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 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2