If you're seeing warnings like "Warning: Unknown: 6 result set(s) not freed. Use mysql_free_result to free result sets which were requested using mysql_query() in Unknown on line 0" and want to turn them off, set mysql.trace_mode = Off in your php.ini
mysql_free_result
(PHP 4, PHP 5)
mysql_free_result — Gibt belegten Speicher wieder frei
Beschreibung
$result
)
mysql_free_result() gibt den Speicher frei, der mit
result (Ergebnis-Kennung) assoziert ist.
Die Funktion muss nur dann aufgerufen werden, wenn Sie sich bei Anfragen, die große Ergebnismengen liefern, Sorgen über den Speicherverbrauch zur Laufzeit des PHP-Skripts machen. Nach Ablauf des Skripts wird der Speicher ohnehin freigegeben.
Parameter-Liste
-
Ergebnis -
Das Ergebnis Ressource, das ausgewertet wird. Dieses Ergebnis kommt von einem Aufruf von mysql_query().
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
Wird für den Parameter result ein Wert angegeben,
der nicht vom Typ resource ist, wird ein Fehler der Stufe E_WARNING
ausgegeben. Beachten Sie, dass mysql_query() nur eine
resource für SELECT, SHOW, EXPLAIN und DESCRIBE Abfragen
liefert.
Beispiele
Beispiel #1 Ein mysql_free_result() Beispiel
<?php
$result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
if (!$result) {
echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();
exit;
}
/* Benutze result, unrer der Annahme wir sind hinterher damit fertig */
$row = mysql_fetch_assoc($result);
/* Nun geben wir den Speicher für result frei und fahren in unserem Skript fort */
mysql_free_result($result);
echo $row['id'];
echo $row['email'];
?>
Anmerkungen
Hinweis:
Für die Abwärtskompatibiliät kann der folgende veraltete Alias verwendet werden: mysql_freeresult()
Siehe auch
- mysql_query() - Sendet eine Anfrage an MySQL
- is_resource() - Prüft, ob eine Variable vom Typ resource ist
mysql_free_result
26-Feb-2006 03:00
ALWAYS use this function! I just encountered a bug in my code where I forgot to use this function. I also happen to be using mysql_pconnect() for a persistent connection. If you forget to free the result, it can hold the old result set open indefinitely within the HTTP process.
The upshot (in my application) was that I did updates that happened in a different HTTP process, but they mysteriously didn't show up in another HTTP process. After panicking that MySQL had mysterious data corruption and/or synchronization problems, I traced it back to this where an old result set was held open.
20-Sep-2005 01:45
yes, i encountered that too. as far as i could tell, that's because the script is stored in memory after being compiled and that's as much more memory as it needs for a call to that function.
if you always get lotsa data in your results, using this function will decrease memory usage tho, unless you use non-buffered queries (which are preferable unless you absolutely *have* to use mysql_seek(), or you need to do another query while the last one hasn't finished reporting back, as they can provide a small speedup)
02-Jul-2005 09:11
You not need to use this if you are using PHP 4.
The comment below this comment may explain why it's actually costing more memory.
14-Jun-2005 11:42
Using this function may actually increase the amount of memory used. In my case, the script used 208 bytes less memory when *not* using mysql_free_result().
Check for yourself: call memory_get_usage() at the end of the script.