English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Mensagem de conteúdo insuficiente ao consultar uma grande quantidade de dados do banco de dados:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
Este problema no site oficial do PHP é chamado de consulta bufferizada e não-buffereada (Buffered and Unbuffered queries). O modo padrão de consulta do PHP é bufferizado. Isso significa que os resultados da consulta serão extraídos uma vez para o espaço de memória e processados pelo programa PHP. Isso oferece ao programa PHP funcionalidades adicionais, como calcular o número de linhas, mover o ponteiro para uma linha específica, etc. O mais importante é que o programa pode realizar consultas e filtragens repetidas do conjunto de dados. Mas a deficiência deste modo de consulta bufferizada é o consumo de memória, ou seja, troca de espaço por velocidade.
Em contrapartida, outro modo de consulta do PHP é a consulta não-buffereada, onde o servidor de banco de dados retorna os dados um por um, em vez de retornar todos de uma vez. Isso resulta em o programa PHP consumindo menos memória, mas aumentando a pressão no servidor de banco de dados, pois o banco de dados continuará a esperar que o PHP recolha os dados até que todos sejam concluídos.
Claramente, o modo de consulta bufferizada é adequado para consultas de pequenas quantidades de dados, enquanto a consulta não-buffereada é adequada para consultas de grandes quantidades de dados.
Todos conhecem o modo de bufferização de consulta do PHP, a seguir, apresentamos um exemplo de como executar a API de consulta não-buffereada.
Método de consulta não-buffereado: mysqli
<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); $uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); if ($uresult) { while ($row = $uresult->fetch_assoc()) { echo $row['Name'] . PHP_EOL; } } $uresult->close(); ?>
Método de consulta não-buffereada dois: pdo_mysql
<?php $pdo = new PDO("mysql:host=localhost;dbname=world", 'my_user', 'my_pass'); $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); $uresult = $pdo->query("SELECT Name FROM City"); if ($uresult) { while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { echo $row['Name'] . PHP_EOL; } } ?>
Método de consulta não-buffereada três: mysql
<?php $conn = mysql_connect("localhost", "my_user", "my_pass"); $db = mysql_select_db("world"); $uresult = mysql_unbuffered_query("SELECT Name FROM City"); if ($uresult) { while ($row = mysql_fetch_assoc($uresult)) { echo $row['Name'] . PHP_EOL; } } ?>
Isso é tudo o que há no artigo. Esperamos que ajude no seu aprendizado e que você apóie o tutorial Grito com mais força.
Declaração: O conteúdo deste artigo é extraído da internet, pertencente ao respectivo detentor dos direitos autorais, uploaded por usuários da internet de forma voluntária. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal. Se você encontrar conteúdo suspeito de violar direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, troque # por @ para denunciar e forneça provas relevantes. Em caso de verificação, o site deletará imediatamente o conteúdo suspeito de infringir direitos autorais.)