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

3 篇文章 0 订阅

上周五一整天焦头烂额,一直在坑里爬。折腾了一整天也没爬出来,到最搞得自己非常急躁。
今天突然想起这个事情,又拿出来继续爬。结果还碰上了许多问题,个人电脑没跑过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中做判断查询多个状态,但是有时间限制时,就会绑定多个重复参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值