$stmt->close() vs $stmt->free_result()

Nicholaos Renessis picture Nicholaos Renessis · Oct 23, 2013 · Viewed 14.8k times · Source

I am trying to clarify the difference between $stmt->close() and $stmt->free_result() when finalizing a prepared mysqli statement.


So far I use:

$mysqli = new mysqli(host,user,password,database);
$stmt = $mysqli->prepare(sql statement);
[...]
$stmt->free_result();
$mysqli->close();

and everything seems to work fine.

But I've seen a lot of programmers use $stmt->close instead of $stmt->free_result(). And once I've seen both of them:

$stmt->free_result();
$stmt->close();
$mysqli->close();

So what should I choose, under which circumstances and why?

Answer

Crackertastic picture Crackertastic · Oct 23, 2013

$stmt->free_result() frees up memory related to a result set, whereas $stmt->close() frees up memory related to a prepared statement. Subsequently calling $stmt->close() will cancel any result still remaining.

In essence, calling $stmt->close() will provide the same effect as calling $stmt->free_result() since it cancels the result set as well. But calling $stmt->free_result() will not clear out the memory used by the prepared statement in which case you must use $stmt->close().

As far as which one to use goes - there may be situations where you intend on using the prepared statement you have initialized, but are no longer in need of the result set you currently have. In such a case you would wait on calling $stmt->close() until you are done with the prepared statement and instead call $stmt->free_result() before executing another statement.