php - 在准备一个新的之前,你什么时候必须关闭一个 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 函数吗?在准备新的陈述之前,我通常不必结束陈述。
谢谢。
解决方案
如果$stmt
被替换或超出范围,它将被销毁。您可以将其作为一种形式关闭,但通常它会得到处理。
调用close()
会立即释放任何相关资源。如果你不这样做,你需要等待垃圾收集器来处理它。
推荐阅读
- reactjs - React Route 警告:在渲染不同的组件(`Context.Consumer`)时无法更新组件(`App`)
- java - 抛出异常时的 AssertionError Java
- php - 如何在 GET 请求中使用特殊字符?
- ios - 无法分配给属性:“popupHeight”是一个只能获取的属性
- mongodb - 如何修复 findOneAndUpdate?
- sql-server - 为什么 SSMS 告诉我这是一个错误,尽管脚本正在运行
- github - Github Action 触发另一个 repo 更新(push、pull_request)
- .net-core - 通过 EF 中的 ValueTask 进行广义异步数据加载
- rust - 二维中的 Bevy 旋转
- r - 如何计算R中数据框中列表列的每一列中的元素