Comment interroger la base de données en utilisant le mode non tamponné en PHP

墨辰丷
Libérer: 2023-03-28 06:52:01
original
1369 Les gens l'ont consulté

Requêtes avec et sans tampon. Le mode de requête par défaut de PHP est le mode tamponné. En d'autres termes, les résultats des données de la requête seront immédiatement extraits dans la mémoire pour être traités par le programme PHP. Les amis dans le besoin peuvent se référer à

Récemment, j'ai rencontré l'erreur suivante lors du développement d'un programme PHP :

Erreur fatale PHP : taille de mémoire autorisée de 268 435 456 octets épuisée

Le message d'erreur indique que la mémoire maximale autorisée a été épuisée. J'ai été surpris de rencontrer une telle erreur au début, mais après y avoir réfléchi, ce n'est pas surprenant, car le programme que je développe consiste à utiliser une instruction de boucle foreach pour rechercher des caractéristiques spécifiques dans une table contenant 40 000 enregistrements de données. c'est-à-dire qu'il faut extraire 40 000 données à la fois, puis vérifier les données quotidiennes une par une. Il est concevable que si les 40 000 données étaient chargées dans la mémoire, il serait étrange que la mémoire n'éclate pas.

Après toutes ces années de programmation, je me souviens vaguement que PHP fournit une API qui ne charge pas les données en une seule fois. C'est une méthode de requête qui peut être utilisée et perdue comme le streaming multimédia, et les données ne le seront pas. s'accumulent dans la mémoire. Après une simple recherche, j'ai trouvé l'utilisation correcte sur le site officiel. Requêtes avec et sans tampon. Le mode de requête par défaut de PHP est le mode tamponné. En d’autres termes, les résultats des données de la requête seront extraits en mémoire d’un seul coup pour être traités par le programme PHP. Cela donne au programme PHP des fonctions supplémentaires, telles que compter le nombre de lignes, pointer le pointeur vers une certaine ligne, etc. Ce qui est plus important, c'est que le programme peut effectuer à plusieurs reprises des requêtes secondaires et des opérations de filtrage sur l'ensemble de données. Mais l’inconvénient de ce mode de requête tamponné est qu’il consomme de la mémoire.

Un autre mode de requête PHP est la requête sans tampon. Le serveur de base de données renverra les données une par une au lieu de toutes en même temps. Le résultat est que le programme PHP consomme moins de mémoire, mais cela augmente la charge de la base de données. serveur. Pression, car la base de données continuera d'attendre que PHP récupère les données jusqu'à ce que toutes les données soient récupérées.

Méthode de requête sans tampon 1 : 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[&#39;Name&#39;] . PHP_EOL;
  }
}
$uresult->close();
Copier après la connexion

Méthode de requête sans tampon deux : pdo_mysql

<?php
$pdo = new PDO("mysql:host=localhost;dbname=world", &#39;my_user&#39;, &#39;my_pass&#39;);
$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[&#39;Name&#39;] . PHP_EOL;
  }
}
Copier après la connexion

Troisième méthode de requête sans tampon : 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[&#39;Name&#39;] . PHP_EOL;
  }
}
Copier après la connexion

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à tout le monde, l'apprentissage aide.


Recommandations associées :

Framework PHP Yii Requête de base de donnéesRésumé des opérations

MySQLRequête de base de donnéesRequête de base, simple, requête conditionnelle, trier les résultats de la requête

MySQLRequête de base de donnéesExpérience partage sur le fonctionnement du XML

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal