gpt4 book ai didi

PHP PDO缓冲查询问题

转载 作者:可可西里 更新时间:2023-11-01 06:44:24 29 4
gpt4 key购买 nike

我在使用 PHP 数据对象函数时遇到了一些严重的问题。我正在尝试使用缓冲查询遍历一个相当大的结果集(~60k 行,~1gig)以避免获取整个结果集。

无论我做什么,脚本都卡在 PDO::query() 上——看起来查询运行时没有缓冲(否则为什么结果集大小的变化会“解决”问题?)。这是我重现问题的代码:

<?php
$Database = new PDO(
'mysql:host=localhost;port=3306;dbname=mydatabase',
'root',
'',
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true
)
);

$rQuery = $Database->query('SELECT id FROM mytable');

// This is never reached because the result set is too large
echo 'Made it through.';

foreach($rQuery as $aRow) {
print_r($aRow);
}
?>

如果我用一些合理的数字限制查询,它工作正常:

$rQuery = $Database->query('SELECT id FROM mytable LIMIT 10');

我尝试过使用 PDO::MYSQL_ATTR_MAX_BUFFER_SIZE 并使用 PDO::prepare() 和 PDO::execute() (尽管上述查询中没有参数),但都无济于事。任何帮助将不胜感激。

最佳答案

如果我没理解错的话,缓冲查询涉及告诉 PHP 在开始处理之前您要等待整个结果集。在 PDO 之前,这是默认设置,您必须调用 mysql_unbuffered_query如果您想立即处理结果。

为什么 PDO MySQL 驱动程序页面上没有对此进行解释,我不知道。

关于PHP PDO缓冲查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/578665/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com