In PHP ist Next_Result () eine gemeinsame Methode in MySQLI -Erweiterungen und wird normalerweise bei der Ausführung mehrerer Abfragen verwendet. Viele Entwickler können jedoch die Veröffentlichung von Ressourcen ignorieren, wenn sie Next_Result () verwenden, was zu Speicherlecks und Leistungsproblemen führt. Um dies zu vermeiden, teilen dieser Artikel 3 praktische Tipps, um sicherzustellen, dass die Ressourcen bei der Verwendung von Next_Result () korrekt freigegeben werden.
Wenn mehrere Abfragen ausgeführt werden, liest und verarbeitet Next_Result () den Ergebnissatz jeder Abfrage. Wenn das Ergebnissatz nicht rechtzeitig veröffentlicht wird, werden sie immer Speicher aufnehmen. Um dies zu vermeiden, rufen Sie nach jeder Verarbeitung des Ergebniss die Methode Free_Result () an.
Beispielcode :
<?php
// Erstellen Sie eine Datenbankverbindung
$mysqli = new mysqli("localhost", "username", "password", "database");
// Führen Sie mehrere Fragen aus
$mysqli->multi_query("SELECT * FROM table1; SELECT * FROM table2;");
// Verarbeiten Sie das erste Ergebnissatz
do {
if ($result = $mysqli->store_result()) {
// Verarbeitungsdaten
while ($row = $result->fetch_assoc()) {
echo $row['column_name'];
}
// Reinigen Sie das erste Ergebnissatz
$result->free();
}
// Gehen Sie zum nächsten Ergebnissatz
} while ($mysqli->next_result());
?>
Nachdem wir im obigen Code das erste Abfrageergebnissatz verarbeitet haben, nennen wir $ result-> Free (), um die Ressource zu befreien. Anschließend wird der Ergebnissatz der nächsten Abfrage von Next_Result () fortgesetzt.
Wenn mehrere Abfragen mit Multi_Query () ausgeführt werden, werden die nachfolgenden Abfrageergebnisse möglicherweise nicht normal veröffentlicht, wenn eine der Abfragen fehlschlägt. In diesem Fall können Sie sicherstellen, dass der Ergebnissatz jeder Abfrage durch Überprüfung der zurückgegebenen Fehlermeldung aufgeräumt wird.
Beispielcode :
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// Führen Sie mehrere Abfrageanweisungen aus
$query = "SELECT * FROM table1; SELECT * FROM table2;";
if ($mysqli->multi_query($query)) {
do {
if ($result = $mysqli->store_result()) {
// Verarbeitungsdaten
while ($row = $result->fetch_assoc()) {
echo $row['column_name'];
}
// Reinigen Sie das Ergebnissatz
$result->free();
}
} while ($mysqli->next_result());
} else {
echo "Error: " . $mysqli->error;
}
?>
Wenn Multi_query () in diesem Beispiel nicht ausgeführt wird, gibt der Code eine Fehlermeldung aus, anstatt weiterhin nachfolgende Abfragen auszuführen, was verhindert, dass ungewedelige Ergebnissätze Ressourcen besetzen.
In einigen Szenarien wird empfohlen, Transaktionen zu verwenden, um die reibungslose Ausführung von Abfragen zu gewährleisten, und die Freigabe jeder Abfrage kann manuell verwaltet werden. Dies kann aufgrund einer falschen Abfragebestellung keine Ressourcen -Unrelease -Probleme vermeiden.
Beispielcode :
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// Starten Sie eine Transaktion
$mysqli->begin_transaction();
try {
// Führen Sie die erste Abfrage aus
$mysqli->query("SELECT * FROM table1;");
// Führen Sie die zweite Abfrage aus
$mysqli->query("SELECT * FROM table2;");
// Transaktionen einreichen
$mysqli->commit();
} catch (Exception $e) {
// Wenn ein Fehler auftritt, wird die Transaktion zurückgerollt
$mysqli->rollback();
echo "Failed: " . $e->getMessage();
} finally {
// Reinigen Sie alle Ergebnissätze
while ($mysqli->more_results()) {
$mysqli->next_result();
}
}
?>
In diesem Beispiel verwenden wir Transaktionen, um mehrere Abfragen zu verarbeiten, und stellen Sie nach Abschluss der Ausführung sicher, dass Next_Result () aufgerufen wird, um den Ergebnissatz aller Abfragen freizugeben.
Um das Problem der Unverrelease von Ressourcen bei der Verwendung von Next_Result () zu vermeiden, verfolgen Sie die folgenden Punkte:
Rufen Sie nach jedem Prozess der Abfrageergebnisse Free_Result () auf, um die Ressource zu befreien.
Achten Sie bei der Ausführung mehrerer Abfragen mit Multi_Query () vorsichtig mit der Fehlerbehandlung und stellen Sie sicher, dass die Ergebnisse jeder Abfrage ordnungsgemäß gereinigt werden.
Steuern Sie bei der Verwendung von Transaktionen die Abfragereihenfolge manuell und stellen Sie sicher, dass alle Ergebnissätze gereinigt werden, nachdem alle Abfragen ausgeführt wurden.
Durch die Befolgung dieser Tipps können Sie unveröffentlichte Ressourcen effektiv vermeiden und so die Anwendungsleistung und -stabilität verbessern.