<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Dieser Teil des Codes hat nichts mit dem Inhalt des Artikels zu tun,Nur zum Beispiel Platzhalter</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Willkommen, um diesen Artikel zu lesen,In diesem Artikel wird erläutert, wie man ihn benutztmysqli::use_resultFunktionsvermeidungPHPSpeicherüberlaufproblem。"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-meta"><?php</span></span><span>
<span class="hljs-comment">/*
* Wie man passtmysqli::use_resultFunktionen werden effektiv vermiedenPHPSpeicherüberlaufproblem?
*
* existierenPHPMitte,verwendenMySQLWenn die Datenbank,Es gibt oft Probleme mit dem Speicherüberlauf, wenn das Abfrageergebnissatz groß ist。特别是当verwendenmysqliErweitern Sie die Abfrageausführung großer Ergebnissätze,
* Wenn alle Ergebnisse gleichzeitig in den Speicher geladen werden,Sehr leicht zu verursachenPHPSpeicher erschöpft,Programmabsturz。
*
* mysqliBietet zwei Möglichkeiten, um Fragen zu erhalten:store_result()Unduse_result()。
*
* 1. store_result():
* Standardmethode,会将整个结果集一次性取回并缓存existieren客户端内存Mitte。
* Für ein großes Datenvolumen,Sehr großer Speicherverbrauch。
*
* 2. use_result():
* verwenden"Zeilenebene"Wie man bekommt,Wird nicht alle Ergebnisse gleichzeitig abrufen,Lesen Sie stattdessen Daten über das Netzwerk durch。
* 这样可以显著降低内存verwenden,Vermeiden Sie den Speicherüberlauf。
*
* 本文重点讲解如何合理verwendenmysqli::use_result()避免Speicherüberlaufproblem。
*/</span>
<span class="hljs-comment">/**
* verwendenmysqli::use_resultBeispielcode für
*/</span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">'localhost'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>, </span><span><span class="hljs-string">'database'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Eine Frage ausführen</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">real_query</span></span><span>(</span><span><span class="hljs-string">"SELECT * FROM large_table"</span></span><span>)) {
</span><span><span class="hljs-comment">// passierenuse_resultHolen Sie sich das Ergebnissatz,Vermeiden Sie es, große Datenmengen gleichzeitig zu laden</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">use_result</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span>) {
</span><span><span class="hljs-comment">// Verarbeitungsdatenlinie nach Linie,Reduzieren Sie den Speicherverbrauch</span></span><span>
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
</span><span><span class="hljs-comment">// Verarbeiten Sie jede Datenreihe,Zum Beispiel ausgeben oder in eine Datei schreiben</span></span><span>
</span><span><span class="hljs-comment">// echo $row['column_name'] . PHP_EOL;</span></span><span>
}
</span><span><span class="hljs-comment">// Release -Ergebnis Ressourcen festlegen</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Es wurden keine Ergebnisse erzielt:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Abfrage fehlgeschlagen:"</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error;
}
</span><span><span class="hljs-comment">// Schließen Sie die Verbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
<span class="hljs-comment">/*
* Detaillierte Beschreibung:
*
* 1. Streaming -Lesen:
* verwendenuse_result(),MySQLDer Server sendet die Ergebnisse nicht sofort an den Client,Halten Sie stattdessen die Verbindung,
* Lassen Sie die Client -Lektüre nach Linie lesen。这样避免了大量数据existieren内存Mitte积累。
*
* 2. Dinge zu beachten:
* - existierenverwendenuse_result()Stunde,Alle Ergebnisse oder Anrufe müssen zuerst gelesen werdenfree(),Nur dann kann die neue Abfrage ausgeführt werden。
* - Kann nicht gemischt werdenstore_result()Unduse_result(),Vermeiden Sie die Verbindlichkeit der Verbindung。
* - Die Netzwerkverbindung muss verwaltet werden,读取过程不能Mitte断。
*
* 3. Leistungsvergleich:
* Kontraststore_result(),use_result()Opfert eine gewisse Leistung(Erfordert mehrere Netzwerkinteraktionen),
* 但显著减少了内存verwenden,Geeignet für große Datenszenarien。
*
* 4. Anwendbare Szenarien:
* - Abfrageergebnisse sind sehr groß,Auf einmal laden kann。
* - Müssen die Ergebnisse in Stücken verarbeiten,Wenn Sie in eine Datei schreiben、Paginationsexport usw.。
*
* Zusammenfassen:
* verwendenmysqli::use_result()Streaming -Abfrage implementieren,Ja, vermeidenPHPEine effektive Strategie für den Speicherüberlauf。
* Es ermöglicht Entwicklern, Datenzeile nach Linie zu erhalten,降低内存峰值verwenden,Dies verbessert die Programmstabilität。
*/</span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Verwandte Tags:
mysqli