Heim  >  Artikel  >  Backend-Entwicklung  >  Lösung für das Problem der Speichererschöpfung beim Abfragen großer Datenmengen in PHP

Lösung für das Problem der Speichererschöpfung beim Abfragen großer Datenmengen in PHP

墨辰丷
墨辰丷Original
2018-05-31 09:59:401471Durchsuche

In diesem Artikel wird hauptsächlich die Lösung für das Speichererschöpfungsproblem bei der Abfrage großer Datenmengen durch PHP vorgestellt. Interessierte Freunde können sich auf

Abfragen großer Datenmengen aus der Datenbank beziehen. Wenn der Inhalt nicht ausreicht, erscheint eine Meldung :

Schwerwiegender PHP-Fehler: Zulässige Speichergröße von 268 435 456 Bytes erschöpft

Dieses Problem ist in PHP. Die offizielle Website nennt sie gepufferte Abfragen und ungepufferte Abfragen (gepufferte und ungepufferte Abfragen). Der Standardabfragemodus von PHP ist der gepufferte Modus. Mit anderen Worten: Die Ergebnisse der Abfragedaten werden auf einmal in den Speicher extrahiert, um sie vom PHP-Programm zu verarbeiten. Dadurch erhält das PHP-Programm zusätzliche Funktionen, wie z. B. das Zählen der Zeilenanzahl, das Zeigen des Zeigers auf eine bestimmte Zeile usw. Noch wichtiger ist, dass das Programm wiederholt sekundäre Abfragen und Filtervorgänge für den Datensatz durchführen kann. Der Nachteil dieses gepufferten Abfragemodus besteht jedoch darin, dass er Speicher verbraucht, d. h. Platz gegen Geschwindigkeit eintauscht.

Im Gegensatz dazu ist ein anderer PHP-Abfragemodus eine nicht gepufferte Abfrage. Der Datenbankserver gibt die Daten einzeln und nicht alle auf einmal zurück. Das Ergebnis ist, dass das PHP-Programm weniger Speicher verbraucht, aber den Speicher erhöht Der Druck auf den Datenbankserver, da die Datenbank darauf wartet, dass PHP die Daten abruft, bis alle Daten abgerufen sind.

Natürlich eignet sich der gepufferte Abfragemodus für Abfragen mit kleinen Datenmengen, während nicht gepufferte Abfragen für Abfragen mit großen Datenmengen geeignet sind.

Jeder kennt die gepufferte Abfrage-API von PHP. Das unten aufgeführte Beispiel zeigt, wie die nicht gepufferte Abfrage-API ausgeführt wird.

Nicht gepufferte Abfragemethode eins: 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(); 
?>


Nicht gepufferte Abfragemethode zwei: 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; 
  } 
} 
?>


Nicht gepufferte Abfragemethode drei: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; 
  } 
} 
?>


Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein.


Verwandte Empfehlungen:

So implementieren Sie die hexadezimale Farbzufallsgeneratorfunktion in PHP

Eine beispielhafte Erklärung der Methode zur Überprüfung, ob die Website mit PHP ausgefallen ist

Eingabeaufforderungsfunktion für Anmeldeseiteninformationen, implementiert von PHP (Beispielanalyse)


Das obige ist der detaillierte Inhalt vonLösung für das Problem der Speichererschöpfung beim Abfragen großer Datenmengen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn