【发布时间】:2011-01-25 22:42:41
【问题描述】:
我有一些关于使用 MySQLi 查询和相关内存管理的问题。
假设我有这样的事情:
$db = new mysqli($dbhost, $un, $ps, $dbname);
$query = "SELECT field1, field2 FROM table1 ";
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the results
}
$query = "SELECT field1, field2 FROM table2 ";
// question 1
$results = $db->query($query);
while ($result = $results->fetch_object()) {
// Do something with the second set of results
}
// Tidy up, question 2
if ($results) {
$results->free();
}
if ($db) {
$db->close();
}
// Question 3, a general one
所以,根据上面代码中的 cmets,这是我的问题:
-
当我将第二个查询的结果分配给
$results时,与之前的结果相关联的内存会发生什么变化?我应该在分配新结果之前释放该结果吗? -
与1有关,当我最后清理时,只清理最后的结果就够了吗?
-
当我尝试清理结果时,我应该像上面那样释放它,我应该关闭它,还是两者兼而有之?
我问问题 3 是因为 the PHP documentation for mysqli::query 有一个使用 close 的示例,即使 close 不是 mysqli_result 的一部分(参见上面链接中的示例 1)。相比之下,我的普通 PHP 参考文本使用 free(PHP 和 MySQL Web 开发,第四版,Welling 和 Thomson)。
【问题讨论】: