INCLUDE mysqli object
--
$sel = $mysqli->query("select * from `items`");
while($res = $sel->fetch_assoc()) {
$items[] = $res;
}
$sel->free_result();
$sel = $mysqli->query("select * from `sets`");
while($res = $sel->fetch_assoc()) {
$sets[] = $res;
}
$sel->free_result();
$sel = $mysqli->query("select * from `parts`");
while($res = $sel->fetch_assoc()) {
$parts[] = $res;
}
$sel->free_result();
--
DO OTHER STUFF
前两次执行$sel->free_result();
真的需要吗?
我认为当我重用变量sel
时,它们是不必要的。
你同意我的意见吗?
答案 0 :(得分:0)
关于此事的PHP documentation:
您应该始终使用
mysqli_free_result()
释放您的结果 不再需要你的结果对象了。
查看该页面的评论部分给出了原因:
如果您收到此错误:内部SQL错误:2014,命令输出 同步;你现在不能运行这个命令
然后你从未调用过mysqli_result :: free(), mysqli_result :: free_result(),mysqli_result :: close(),或 脚本中的mysqli_free_result(),必须在执行前调用它 另一个存储过程。
基本上,您不需要这样做,但可能会出现奇怪的情况,您无法执行其他程序,并且命令可能不同步。
另一个可能来自不做的问题是结果可能会占用大量内存,所以如果你在需要内存的查询之间放入新代码,那么你可能遇到脚本崩溃的问题无法分配更多内存。通过释放结果,您需要在查询执行之间进行更改,以帮助减少发生这种情况的可能性。
在极端情况下,如果您在系统的另一部分中发现了可以读取其他内存地址的错误,并且其中一个查询中存储了敏感信息,那么通过不释放结果,您可以&# 39;可能让攻击者有机会从内存中读取敏感信息。
在有问题的情况下,其他情况一定会受到影响,但这两种情况都会浮现在脑海中。
简而言之,最好放弃结果,不要在不需要的情况下将信息记录在内存中。