Maison  >  Article  >  développement back-end  >  Comment interroger la base de données en utilisant le mode non tamponné en PHP

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

墨辰丷
墨辰丷original
2018-05-26 10:52:481349parcourir

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();

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;
  }
}

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;
  }
}

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!

Déclaration:
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