Maison  >  Article  >  développement back-end  >  Solution au problème de l'épuisement de la mémoire lors de l'interrogation de grandes quantités de données en PHP

Solution au problème de l'épuisement de la mémoire lors de l'interrogation de grandes quantités de données en PHP

墨辰丷
墨辰丷original
2018-05-31 09:59:401472parcourir

Cet article présente principalement en détail la solution au problème d'épuisement de la mémoire de PHP interrogeant de grandes quantités de données. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Interrogation de grandes quantités de données à partir de la base de données. Lorsque le contenu est insuffisant, une invite apparaîtra :

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

Ce problème est en PHP Le site officiel les appelle requêtes tamponnées et requêtes non tamponnées (Requêtes tamponnées et non tamponnées). 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. Cependant, l’inconvénient de ce mode de requête tamponné est qu’il consomme de la mémoire, c’est-à-dire qu’il échange de l’espace contre de la vitesse.

En revanche, un autre mode de requête PHP est une 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 augmente la mémoire. consommation. La pression sur le serveur de base de données, car la base de données attendra que PHP récupère les données jusqu'à ce que toutes les données soient récupérées.

Évidemment, le mode de requête tamponné convient aux requêtes avec de petits volumes de données, tandis que les requêtes non tamponnées conviennent aux requêtes avec de gros volumes de données.

Tout le monde connaît la requête en mode tamponné de PHP. L'exemple ci-dessous montre comment exécuter l'API de requête non tamponnée.

Première méthode de requête sans tampon : 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 représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.


Recommandations associées :

Comment implémenter la fonction de générateur aléatoire de couleurs hexadécimales en PHP

Un exemple d'explication de la méthode de vérification si le site Web est en panne avec PHP

Fonction d'invite d'informations sur la page de connexion implémentée par PHP (exemple d'analyse)


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