Yii CDbCommand queryAll()返回错误的结果


Yii CDbCommand queryAll() return wrong result

我正在使用Yii CDbCommand从mysql中获取结果
我在mysql查询和var_dump Yii的CDbCommon SQL中记录SQL
这是一样的。我通过CDbCommand->queryAll()得到结果
但是结果与在phpMyAdmin中运行相同的SQL不一样。

> SELECT `referer_url_id` FROM `trend_referer` WHERE
> ((`site_id` = '45654' and `date` between '20131211' and '20131211'))
> GROUP BY `referer_url_id` LIMIT 6
> OFFSET 30;

此SQL。我从queryAll和phpMyAdmin中得到了6个结果
但其中只有3个是相同的。其他3个不同
这很奇怪。

编辑:最奇怪的是,这个问题几分钟后就消失了
并出现在另一个"LIMIT 6 OFFSET xx"中
xx不是一直都一样
所以我认为这是PDO或Yii中的缓存机制吗?

试试这个

SELECT `referer_url_id` FROM `trend_referer` WHERE
((`site_id` = '45654' and (`date` between '20131211' and '20131211')) )
GROUP BY `referer_url_id` LIMIT 6
OFFSET 30;

date between '20131211' and '20131211' 周围添加圆括号

编辑:

对于偏移错误"LIMIT 6 offset xx"。

将查询更改为

GROUP BY `referer_url_id` LIMIT 30, 6

我知道问题出在哪里。因为Yii CDbCommand.php的buildQuery()函数连接SQL时使用"'n"作为换行符,但不使用空格
例如

SELECT * FROM table WHERE 1=1 GROUP BY field;

将成为

SELECT *'nFROM table'nWHERE 1=1'nGROUP BY field;

这会导致不同的结果
我修改buildQuery()。将"''n"替换为空格。我可以得到正确的结果集。

我正在针对MySQL-5.5.18-log版本进行测试。我不知道是MySQL bug还是Yii。