You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii 1查询返回错误数据:andWhere条件未生效问题排查

问题分析与解决办法

嘿,我来帮你捋捋这个问题~你遇到的情况是因为Yii 1.x里createCommand()的用法有点小坑:当你直接把完整的SELECT * FROM listings传入createCommand()后,后续调用的where()和andWhere()并不会正确把过滤条件追加到你的SQL语句里,相当于这些条件被忽略了,所以查询变成了单纯的全表查询,自然返回了所有数据,包括c_listing_featured_c为0的记录。

正确的写法有两种,推荐第一种:

方式一:使用Yii查询构建器的链式写法

这种方式让Yii帮你自动拼接SQL,既安全又不容易出错:

$listings = Yii::app()->db->createCommand()
    ->select('*')
    ->from('listings')
    ->where(['or like', 'c_sales_stage', ['Needs Refresh', 'Active']])
    ->andWhere(['c_listing_featured_c' => 1]) // 用数组形式更规范,也能避免SQL注入风险
    ->queryAll();

方式二:手动拼接SQL(不推荐,容易出错)

如果你一定要用初始的完整SELECT语句,得手动把条件写进去并绑定参数:

$listings = Yii::app()->db->createCommand('SELECT * FROM listings WHERE (c_sales_stage LIKE :stage1 OR c_sales_stage LIKE :stage2) AND c_listing_featured_c = 1')
    ->bindValues([
        ':stage1' => '%Needs Refresh%',
        ':stage2' => '%Active%'
    ])
    ->queryAll();

简单总结下:你的核心问题是初始SQL语句和链式条件方法不兼容,改用查询构建器的写法就能让过滤条件正常生效啦。

内容的提问来源于stack exchange,提问作者user3844579

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:06