Signatur
Beschreibung
mysql_free_result() gibt den Arbeitsspeicher wieder frei, der intern für ein MySQL-Ergebnis-Handle reserviert wurde. Dies ist vor allem bei großen Ergebnismengen sinnvoll, um den PHP-Speicherverbrauch während eines langen Skriptlaufs zu reduzieren.
Normalerweise wird der Speicher am Ende eines Skripts automatisch freigegeben. Bei speicherintensiven Anwendungen oder Skripten, die viele aufeinanderfolgende Abfragen durchführen, kann ein expliziter Aufruf von mysql_free_result() jedoch helfen, Speicherengpässe zu vermeiden.
Die Funktion gehört zur veralteten ext/mysql-Erweiterung, die mit PHP 5.5.0 als veraltet markiert und in PHP 7.0.0 vollständig entfernt wurde. Für neue Projekte sollte stattdessen mysqli_free_result() oder PDO mit PDOStatement::closeCursor() verwendet werden.
Nach dem Aufruf ist das übergebene Ergebnis-Handle ungültig und darf nicht mehr für weitere Operationen wie mysql_fetch_assoc() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Das Ergebnis-Handle, das von mysql_query(), mysql_db_query() oder mysql_list_dbs() zurückgegeben wurde und dessen Speicher freigegeben werden soll. |
Rückgabewert
true zurück, wenn der Speicher erfolgreich freigegeben wurde. Gibt false zurück und erzeugt einen Hinweis (E_NOTICE), wenn kein gültiges Ergebnis-Handle übergeben wurde.Beispiele
Speicher nach einer großen Abfrage freigeben
<?php
$conn = mysql_connect('localhost', 'benutzer', 'geheim');
mysql_select_db('meine_datenbank', $conn);
$result = mysql_query('SELECT * FROM grosse_tabelle', $conn);
if ($result) {
while ($row = mysql_fetch_assoc($result)) {
echo $row['name'] . PHP_EOL;
}
// Speicher nach vollständiger Verarbeitung freigeben
mysql_free_result($result);
}
mysql_close($conn);
?>
Mehrere Abfragen mit expliziter Speicherfreigabe
<?php
$conn = mysql_connect('localhost', 'benutzer', 'geheim');
mysql_select_db('meine_datenbank', $conn);
// Erste Abfrage
$result1 = mysql_query('SELECT * FROM kunden', $conn);
while ($row = mysql_fetch_assoc($result1)) {
// Verarbeitung ...
}
mysql_free_result($result1); // Sofort freigeben
// Zweite Abfrage – weniger Speicherdruck
$result2 = mysql_query('SELECT * FROM bestellungen', $conn);
while ($row = mysql_fetch_assoc($result2)) {
// Verarbeitung ...
}
mysql_free_result($result2);
mysql_close($conn);
?>
// Wichtig · Fallstricke
Veraltet: Die gesamte ext/mysql-Erweiterung (einschließlich mysql_free_result()) wurde in PHP 5.5.0 als veraltet (deprecated) markiert und in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, läuft unter PHP 7 und höher nicht mehr.
Für aktuelle Projekte stehen folgende Alternativen zur Verfügung:
mysqli_free_result($result)(prozedurale API) bzw.$result->free()(objektorientierte API)$pdoStatement->closeCursor()bei Verwendung von PDO
Ein Aufruf von mysql_free_result() auf ein Handle, das bereits freigegeben wurde, erzeugt einen E_NOTICE-Fehler. Das Handle sollte nach der Freigabe nicht mehr verwendet werden.