gpt4 book ai didi

php - MySQLi 查询结果 : When do I close, 免费,还是两者兼而有之?

转载 作者:IT王子 更新时间:2023-10-29 01:02:09 26 4
gpt4 key购买 nike

我有一些关于使用 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

因此,根据上面代码中的注释,这是我的问题:

  1. 当我将第二个查询的结果分配给 $results 时,与先前结果关联的内存会发生什么变化?我应该在分配新结果之前释放该结果吗?

  2. 关于 1,当我最后清理时,只清理最后的结果就够了吗?

  3. 当我尝试清理一个结果时,我应该像上面那样释放它,我应该关闭它,还是两者兼而有之?

我问问题 3 因为 the PHP documentation for mysqli::query有一个使用 close 的示例,即使 close 不是 mysqli_result 的一部分(参见上面链接中的示例 1)。相比之下,我的普通 PHP 引用文本使用 free(PHP 和 MySQL Web 开发,第四版,Welling 和 Thomson)。

最佳答案

When I assign the results of thesecond query to $results, what happensto the memory associated with theprevious results?

当你执行这个时:

$results = $db->query($query);

如果之前在 $results 中存在某些内容,则无法再访问此旧内容,因为没有留下对它的引用。

在这种情况下,PHP 会将变量的旧内容标记为“不再需要”——当 PHP 需要一些内存时,它将从内存中删除。

这至少对于一般 PHP 变量是正确的;但是,对于 SQL 查询的结果,一些数据可能会保存在驱动程序级别的内存中——PHP 对此没有太多控制权。


Should I be freeing that result beforeassigning the new one?

我从不这样做。


Related to 1, when I do clean up atthe end, is cleaning up just the lastresults enough?

脚本结束时:

  • 与数据库的连接将被关闭 -- 这意味着应该释放驱动程序可能使用的所有内存
  • PHP 脚本使用的所有变量都将被销毁——这意味着它们正在使用的内存应该被释放。

因此,在脚本结束时,确实不需要释放结果集。


When I do try to clean up a result,should I be freeing it as above,should I be closing it, or both?

如果您关闭与数据库的连接(按照您的建议使用 mysqli::close),这将断开您与数据库的连接。

这意味着如果您想进行其他查询,则必须重新连接!这一点都不好(需要一些时间,资源,...)

一般来说,在我确定不再需要它之前,我不会关闭与数据库的连接——这意味着我不会在脚本结束之前断开连接。

而“脚本结束”的意思是“连接将被关闭”,即使您没有指定它;我几乎从不自己关闭连接。

关于php - MySQLi 查询结果 : When do I close, 免费,还是两者兼而有之?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2417834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com