Está ficando sem memória com PDO / PHP?

Provavelmente, houve um tempo em que você trabalhou com um grande número de linhas provenientes do mySQL via PDO e encontrou um erro de falta de memória. Existe uma solução fácil para esse problema. Todo mundo sabe disso. Direito?

ini_set('memory_limit', '1024M');

Isso não está realmente resolvendo o problema. Está consertando o sintoma. O verdadeiro problema neste caso é que o PDO carrega todo o conjunto de resultados na memória, pois permite que o programa trabalhe com o conjunto de dados mais rápido e permite que o PDO feche a conexão do banco de dados. No entanto, em alguns casos, você deseja apenas manter baixo o uso de memória. Existe uma maneira de fazer isso.

$PDO = new PDO("mysql:host=$host;dbname=$name", $user, $pass);
$PDO
->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);

Isso evita que o PDO tente carregar todo o conjunto de resultados na memória de uma só vez, o que pode reduzir significativamente o uso de memória, com um pequeno custo para o desempenho.