CDbCommand-> queryAll()不返回所有行

时间:2016-05-25 19:56:47

标签: php yii

    $connection = Yii::app()->db;
    $command=$connection->createCommand($sqlStatement);
    $rows=$command->queryAll();

我正在比较SQL运行上面的代码与在MySQL Workbench中运行相同的SQL。并且,两者返回不同的行数。

MySQL Workbench正在返回所有行。上面的代码总是返回一个小于总数的数字。

命令的限制为-1。我不确定还有什么要检查的。是否有一些Yii限制?限制行的内存约束? Yii中的某种缓存?

在上面的代码(在一堆SELECT语句的下游放置在.php脚本中)之前执行的先前SQL语句可能会影响这个吗?

我是Yii的新手,但不是SQL也不是MySQL,而是相当困惑。

2 个答案:

答案 0 :(得分:0)

Listen queryAll()返回一个数组,你需要迭代才能获得所有记录。

foreach($rows as $row){
  //do something
}

尝试按部分查询:

$limit = 1000 ;
$passes = ceil( Yii::app()->db->createCommand( 'SELECT COUNT(*) FROM{{test_data}}' )->queryScalar() / $limit ) ;

for ( $pass = 0 ; $pass < $passes ; $pass++ ) {
$command = Yii::app()->db->createCommand()
    ->select('*')
    ->from( '{{test_data}}' )
    ->limit( $limit )
    ->offset( $pass * $limit ) ;
$result = $command->queryAll() ; // here is your peace of data
}

答案 1 :(得分:0)

这让我得到答案:Mysql "select * from" doesn't return all rows

事实证明,MySQL数据库是ISAM。在对数据库进行一些清理和恢复之后,查询开始返回所有行。