У меня серьезные проблемы с функциями PHP Data Object. Я пытаюсь перебрать большой набор результатов (~ 60 тыс. Строк, ~ 1 гига), используя буферизованный запрос, чтобы избежать выборки всего набора.
Независимо от того, что я делаю, скрипт просто зависает на 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 () (хотя в приведенном выше запросе нет параметров), но оба безрезультатно. Любая помощь будет оценена.