首页 > 解决方案 > 在准备一个新的之前,你什么时候必须关闭一个 php mysqli stmt?

问题描述

如果我不关闭此代码段末​​尾的 stmt:

    $stmt = $mysqli->prepare("SELECT typeId FROM types WHERE name = 'author'");
    $stmt->execute();
    $stmt->bind_result($typeId);
    $stmt->fetch();

(有了这个:)

    $stmt->close();

然后以下准备好的语句失败,错误代码为 0 并且没有错误:

    $stmt = $mysqli->prepare("INSERT INTO typeTracker (reserved_id, typeId) VALUES (NULL, ?)");
    $stmt->bind_param("i", $typeId);

为什么?是因为我在第一个代码块中调用了 bind_result 和 fetch 函数吗?在准备新的陈述之前,我通常不必结束陈述。

谢谢。

标签: phpmysqlmysqli

解决方案


如果$stmt被替换或超出范围,它将被销毁。您可以将其作为一种形式关闭,但通常它会得到处理。

调用close()会立即释放任何相关资源。如果你不这样做,你需要等待垃圾收集器来处理它。


推荐阅读