ZF2 无缓冲 SQL MySQL select
ZF2 unbuffered SQL MySQL select
我有一个 ZF2 控制台应用程序,我需要在其中读取 MySQL 数据库中的八百万条记录。
我正在尝试进行无缓冲的 MySQL 查询,但我找不到使用以太 Zend\Db\TableGateway\TableGateway 或更直接地使用 Zend\Db\Adapter\Adapter 的正确方法,也许我找错了地方?
我正在寻找使用 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);
看看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'];
}
我有一个 ZF2 控制台应用程序,我需要在其中读取 MySQL 数据库中的八百万条记录。
我正在尝试进行无缓冲的 MySQL 查询,但我找不到使用以太 Zend\Db\TableGateway\TableGateway 或更直接地使用 Zend\Db\Adapter\Adapter 的正确方法,也许我找错了地方?
我正在寻找使用 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);
看看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'];
}