有关andwhere绑定参数的问题,请高人指点 [ 2.0 版本 ]
$query_ol = Orderlist::find()->where([
'status' => Orderlist::STATUS_ACTIVE,
'phone' => \Yii::$app->user->identity->username,
]);
$query_ol->andWhere(['<', 'addtime', time()]);
$query_ol->andWhere(['>=', 'addtime', ':addtime1']);
if($query_ol->andWhere([':addtime1'=>strtotime("-1 month")])->count()>=4){
echo 'hello';
}
报错提示如下:
Database Exception – yii\db\Exception
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
The SQL being executed was: SELECT COUNT(*) FROM so_orderlist
WHERE (((status
='1') AND (phone
='18663697137')) AND (addtime
< 1493111483)) AND (addtime
>= ':addtime1')
Error Info: Array
(
[0] => HY093
[1] => 0
)
findinset 补充于 2017-04-26 08:23
@ymfhack
之所以采用参数绑定的方式,是因为下面还有else if 其他情况
else if($query_ol->andWhere([':addtime1'=>strtotime("-1 week")])->count()>=4){
echo 'in week';
}
如果不采用参数绑定的方式,最终的and会变成这样: and addtime>=xxxx and addtime>=yyyy
仍然非常感谢
findinset 补充于 2017-04-26 09:13
SELECT * FROM
so_orderlist WHERE ((((
status=:qp0) AND (
phone=:qp1)) AND (
addtime < :qp2)) AND (
addtime >= :qp3)) AND (
:addtime1=:qp4)
findinset 补充于 2017-04-26 09:33
@ymfhack 解决了,非常感谢朋友的热心回答
$query_ol->andWhere(['>=', 'addtime', ':addtime1']);
if($query_ol->andWhere([':addtime1'=>strtotime("-1 month")])->count()>=4){
echo 'hello';
}
应为:
$query_ol->andWhere('addtime>=:addtime1');
if($query_ol->params([':addtime1'=>strtotime("-1 month")])->count()>=4){
echo 'hello';
}
最佳答案
其他 2 个回答
findinset
注册时间:2017-04-25
最后登录:2018-08-07
在线时长:12小时10分
最后登录:2018-08-07
在线时长:12小时10分
- 粉丝0
- 金钱35
- 威望0
- 积分155