Co dziwne, pakiety PHP dostarczane przez Ubuntu nie są kompilowane z Natywny sterownik Mysql , ale ze starym libmysqlclient zamiast tego (testowane na Ubuntu 13.10 z domyślnymi pakietami):
<?php
echo $dbh->getAttribute(PDO::ATTR_CLIENT_VERSION); // prints "5.5.35", i.e MySQL version
// prints "mysqlnd (...)" when using mysqlnd
Twój przypadek testowy („Edytuj 4”, z setAttribute(MYSQL_ATTR_USE_BUFFERED_QUERY, true)
) działa zgodnie z oczekiwaniami z PHP 5.5.3 ręcznie skompilowanym za pomocą mysqlnd z:
./configure --with-pdo-mysql=mysqlnd # default driver since PHP v5.4
... ale nie powiedzie się z:
bash> ./configure --with-pdo-mysql=/usr/bin/mysql_config
To dość dziwne, że nie powiedzie się tylko wtedy, gdy pierwsza instrukcja zostanie wykonana dwukrotnie; to musi być błąd w libmysqlclient kierowca.
Oba sterowniki nie działają zgodnie z oczekiwaniami, gdy MYSQL_ATTR_USE_BUFFERED_QUERY
jest false
. Twój zdrowy rozsądek już zademonstrował
dlaczego jest to oczekiwane zachowanie, niezależnie od liczby wierszy w zestawie wyników.
Mike dowiedział się, że aktualnym obejściem jest instalacja php5-mysqlnd
pakiet zamiast zalecanego przez firmę Canonical php5-mysql
.