$stmt->关闭() 与 $stmt->free_result()

2022-08-30 17:07:49

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

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


答案 1

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

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

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


答案 2

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

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

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

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

当您不再需要资源时,最好显式释放资源。它可以避免在同时发出许多请求时向服务器造成沉重的负载。

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


推荐