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

时间:2013-10-23 01:26:12

标签: php mysql mysqli prepared-statement

我想在最终确定准备好的 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();

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

2 个答案:

答案 0 :(得分:28)

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

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

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

答案 1 :(得分:2)

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

mysqli::close 关闭准备好的声明。

由于可用的总连接数量有限,因此使用该资源释放资源是一种很好的做法。

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

在您不再需要资源时明确释放资源是一种很好的做法。当同时发出许多请求时,它可能会避免对服务器造成沉重的负担。

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