【问题标题】:$stmt->close() vs $stmt->free_result()$stmt->close() 与 $stmt->free_result()
【发布时间】:2013-11-01 02:38:22
【问题描述】:

我试图澄清 $stmt->close()$stmt->free_result() 在完成准备好的 mysqli strong> 声明。


到目前为止我使用的是:

$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();

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

【问题讨论】:

    标签: php mysql mysqli prepared-statement


    【解决方案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 为给定的语句句柄释放存储的结果内存。

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多