当同一个文件中有多个查询显示错误时,我使用$stmt->close();
close()
我被问到哪个是正确的使用方式,应该使用多少。
$stmt->free_result()
如果使用它,则实现相同的功能,不应再使用它,或者如果使用它,则close()
不应close()
再使用它free_result()
你能给我解释一下吗?
if ($stmt->fetch()) {
echo "Resultados";
} $stmt->close();
else {
$stmt->close();
echo "No existe resultados";
}
是
while ($stmt->fetch()) {
echo "Resultados";
}
$stmt->close();
else {
$stmt->close();
echo "No existe resultados";
}
您运行的任何方法都不属于 PDOStatement(PDOStatement方法列表),但是如果您指的是方法
PDOStatement::closeCursor
和函数mysql_free_result
。两者都释放内存,但第一个是当您使用 PDO 时,另一个是当您使用已弃用的 mysql api 时。
PDOStatement::closeCursor
当查询没有遍历整个结果并且您想要执行另一个查询时,您应该使用它,当查询非常大并且您想要释放使用的内存时,当您想要重用PDOStatement
.您放置的示例无效,因为 if 和 while 的结构不正确。
理想的情况是:
是
始终使用 closeCursor,它永远不会受到伤害。这些就是我推荐的方式。
我们先解释一下两者的区别:
$stmt->free_result()
释放与结果集相关的$stmt->close()
内存,同时释放与准备好的查询相关的内存。随后,调用$stmt->close()
将取消任何剩余的结果。基本上,调用将
$stmt->close()
提供与调用相同的效果,$stmt->free_result()
因为它也会取消结果集。但是调用$stmt->free_result()
不会清除准备好的语句使用的内存,在这种情况下你应该使用$stmt->close()
.至于使用哪一个,可能会有一些情况,你打算使用你已经初始化的prepared statement,但不再需要你当前拥有的结果集。在这种情况下,您将
$stmt->close()
在完成准备好的语句时调用(您可以将不同的值传递给同一个准备好的查询......这是它的优点之一),而是$stmt->free_result()
在执行另一条语句之前调用。专门回答你的问题
在您放置的代码示例中,如果您查看PHP Manual,代码是这样编写的:
这段代码所做的是
$stmt
在退出循环时释放。关闭$stmt
时没有必要免费使用。您还使用
if
... 放置了一个代码示例,但是fetch
必须在循环中读取数据,因为在简单的情况下读取它们时if
,如果有不止一行,您将无法获得所有结果。简而言之:如果您
close
在完成使用准备好的查询和数据时使用,就足够了。如果您想使用free_result
之前close
,请使用它。关于它的使用是否至关重要存在争议。根据这个答案,使用free_result
不会做出任何贡献。您可以memory_get_usage()
在各种情况下进行测试,并确定它是否真的有贡献。根据相同的答案,它的使用并不重要。