在完成准备好的 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 为给定语句句柄释放存储的结果内存。
当您不再需要资源时,最好显式释放资源。 当同时发出许多请求时,它可以避免向服务器造成沉重负载。
两者都不是绝对必要的调用,并且使用两者是一种很好的做法。