2016-05-25 11 views
1

私はMySQLデータベースで800万レコードを読み込む必要があるZF2コンソールアプリケーションを持っています。ZF2 unbuffered SQL MySQL select

私はバッファリングされていないMySQLクエリを実行しようとしていますが、Zend \ Db \ TableGateway \ TableGatewayをエーテルで、またはZend \ Db \ Adapter \ Adapterを使用して正しい方法を見つけることができません。

私は次のように私を与えたことがわかったデバッガとの長い、長い、長いセッションの後Zend Frameworkの2

を使用し、ZF2コードものの読ん数百万行を通読の適切な例を探しています

所望の挙動。 Buffered and unbuffered queries

// Get a database adapter for the source (defalut) db 
    $SourceAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 

    // Turn off source database buffering. 
    $SourceAdapter->getDriver() 
      ->getConnection() 
      ->getResource() 
      ->setAttribute(\PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false); 
     $SourceAdapter->getDriver() 
       ->getConnection() 
       ->getResource() 
       ->setAttribute(\PDO::CURSOR_FWDONLY,true); 

答えて

0

ルックあなたはPDOMySqlドライバを使用している場合は、接続の設定(doctrine.local.php)にバッファリングクエリを無効にするオプションを指定します。

<?php 

return [ 
    'doctrine' => [ 
     'connection' => [ 
      'orm_default' => [ 
       'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 
       'params' => [ 
        'host'  => 'localhost', 
        'port'  => '3306', 
        'user'  => 'root', 
        'password' => '', 
        'dbname' => 'dbname', 
        'charset' => 'utf8', 
        'driverOptions' => [ 
         PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => false 
        ], 
       ], 
      ], 
     ], 
    ], 
]; 

あなたはフェッチする\Doctrine\DBAL\Connectionを使用することができますたとえば、コード内のデータ:

/* @var \Doctrine\DBAL\Connection $connection */ 
$connection = $this->getServiceLocator()->get('doctrine.connection.orm_default'); 

$sql = 'SELECT * FROM Records'; 
$stmt = $connection->query($sql); 

while ($row = $stmt->fetch()) { 
    echo $row['id']; 
} 

Doctrine DBAL Connection - Data retrieval