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['Name'] . PHP_EOL; } } $uresult->close(); ?>
Nicht gepufferte Abfragemethode zwei: 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; } } ?>
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['Name'] . 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!