ZF2无缓冲SQL MySQL选择

时间:2016-05-25 23:10:35

标签: select zend-framework2 unbuffered

我有一个ZF2控制台应用程序,我需要读取MySQL数据库中的800万条记录。

我正在尝试做一个无缓冲的MySQL查询,但我找不到使用以太网Zend \ Db \ TableGateway \ TableGateway或更直接使用Zend \ Db \ Adapter \ Adapter的正确方法或许我在错误的地方看? / p>

我正在寻找使用Zend Framework 2读取数百万行的正确示例。

在使用调试器进行了很长很长的会话并通过ZF2代码读取后,我发现以下内容为我提供了所需的行为。

    // 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);

1 个答案:

答案 0 :(得分:0)

查看Buffered and unbuffered queries

如果您正在使用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