English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Un message d'alerte de contenu insuffisant apparaît lors de la consultation de grandes quantités de données dans la base de données:
PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted
Ce problème sur le site officiel de PHP est appelé requête en buffer et non en buffer (Buffered and Unbuffered queries). Le mode de requête par défaut de PHP est le mode en buffer. Cela signifie que les résultats de la requête sont extraits en une seule fois dans la mémoire pour être traités par le programme PHP. Cela donne au programme PHP des fonctionnalités supplémentaires, comme le calcul du nombre de lignes, le déplacement du pointeur vers une ligne spécifique, etc. Ce qui est plus important, le programme peut effectuer des opérations de requête et de filtrage répétées sur l'ensemble de données. Mais le défaut de ce mode de requête en buffer est la consommation de mémoire, c'est-à-dire l'utilisation de l'espace au détriment de la vitesse.
Par ailleurs, un autre mode de requête PHP est la requête non-buffée, où le serveur de base de données retourne les données une par une, au lieu de les retourner toutes d'un coup. Le résultat est que le programme PHP consomme moins de mémoire, mais il augmente la pression sur le serveur de base de données, car la base de données attendra que PHP vienne chercher les données jusqu'à ce que toutes les données soient complètement récupérées.
Il est évident que le mode de requête en buffer est adapté aux requêtes de petite quantité de données, tandis que la requête non-buffée est adaptée aux requêtes de grande quantité de données.
Chacun connaît les modes de requête en buffer de PHP, voici comment exécuter l'API de requête non-buffée.
Méthode de requête non-buffée une: 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éthode de consultation non buffering deux: 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éthode de consultation non buffering trois : 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; } } ?>
Voici la totalité du contenu de cet article, j'espère qu'il vous aidera dans vos études, et j'espère que vous soutiendrez également le tutoriel de cri.
Déclaration : le contenu de cet article est来源于网络,et appartient à ses auteurs respectifs. Le contenu est apporté par les utilisateurs d'Internet et téléversé spontanément. Ce site ne détient pas de propriété intellectuelle, n'a pas été édité par l'homme et n'assume aucune responsabilité juridique. Si vous trouvez du contenu présumé enfreignant les droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu présumé enfreignant les droits d'auteur.)