Start · Sprachen · PHP · Referenz · mysql_free_result

mysql_free_result

Funktion

Gibt den Speicher frei, der durch ein MySQL-Abfrageergebnis (<code>resource</code>) belegt wird.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_free_result(resource $result): bool

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

Typ
bool
Beschreibung
Gibt 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.