1

ファイルZend\Db\Adapter\Exception\RuntimeExceptionに入る

\library\Zend\Db\Adapter\Driver\Pdo\Result.php:159

私のデータベース設定コードは

array(
  'db' => array(
        'driver'         => 'Pdo',
        'pdodriver'      => 'mysql',            
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
            'buffer_results' => true
        ),
        'username'       => 'root',
        'password'       => '',
        'host'           => 'localhost',
        'dbname'         => 'db_name',
  ),
)

結果取得コードは

$statement  = $this->sql->prepareStatementForSqlObject($select);
$results    = $statement->execute();

$results->buffer();そして私は&& を試しました$results->rewind()

私の反復コードは次のようなものです

foreach ( $results as $result ){    
       // code goes here ..
}
....

foreach ( $results as $result ){    
       // code goes here ..
}
4

2 に答える 2

9

これは、PDO の結果セットが Forward Only であるためです (したがって、巻き戻しはできません)。

ResultSet でラップしてみることができます。

$results    = $statement->execute(); // generate your results

$resultSet = new ResultSet; // Zend\Db\ResultSet
$resultSet->initialize($results);

// You should now be able to iterate over this multiple times..
foreach($resultSet as $row) {
    // .. 
}

// You can now buffer if you need..
$resultSet->buffer();
// Or get an array of all items
$arrayOfResults = $resultSet->toArray();
于 2013-02-15T12:14:13.910 に答える
4

あなたが見ている例外は言う:

この結果は前方のみの結果セットです。前方に移動した後の rewind() の呼び出しはサポートされていません

したがって、簡単な解決策は、結果を配列に格納し、その配列を複数回反復処理することです。

$records = array();

foreach ($results as $result)
{
    $records[] = $result;
}
于 2013-02-15T12:15:46.780 に答える