25

在完成准备好的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();

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

4

2 回答 2

41

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

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

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

于 2013-10-23T01:57:40.110 回答
4

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

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

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

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

当您不再需要资源时,最好显式释放资源。当同时发出许多请求时,它可能会避免给服务器带来沉重的负载。

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

于 2013-10-23T01:57:47.400 回答