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

时间:2013-12-12 06:03:21

标签: php yii pdo pdostatement

我正在使用Yii CDbCommand从mysql中获取结果 我在mysql查询中记录SQL,并通过var_dump Yii的CDbCommand 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中的任何缓存机制?

2 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:-2)

我知道这是什么问题。因为连接SQL的Yii CDbCommand.php的buildQuery()函数使用"\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错误还是Yii。