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


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

在完成准备好的 mysqli 语句时,我试图澄清 $stmt->close() 和 $stmt->free_result() 之间的区别。


到目前为止,我使用:

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

一切似乎都很好。

但是我看到很多程序员使用$stmt->close而不是$stmt->free_result()。一旦我看到他们两个:

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

那么我应该选择什么,在什么情况下以及为什么?

$stmt->free_result()释放

与结果集相关的内存,而$stmt->close()释放与预准备语句相关的内存。 随后调用$stmt->close()将取消剩余的任何结果。

实质上,调用$stmt->close()将提供与调用$stmt->free_result()相同的效果,因为它也会取消结果集。 但是调用$stmt->free_result()不会清除预准备语句使用的内存,在这种情况下,您必须使用 $stmt->close()

至于使用哪一个 - 在某些情况下,您打算使用已初始化的预准备语句,但不再需要当前拥有的结果集。 在这种情况下,您将等待调用$stmt->close()直到完成预准备语句,而是在执行另一个语句之前调用$stmt->free_result()

PHP 将在完成运行后结束您的连接并释放资源;

mysqli::close 关闭准备好的语句。

由于可用的连接总数有限,因此在完成资源的那一刻释放资源是一种很好的做法。

mysqli_stmt::free_result 为给定语句句柄释放存储的结果内存。

当您不再需要资源时,最好

显式释放资源。 当同时发出许多请求时,它可以避免向服务器造成沉重负载。

两者都不是绝对必要的调用,并且使用两者是一种很好的做法。