我正在学习php / mysql。我似乎没有找到一些q的确定答案。你能澄清一些它们或者指出我可靠的来源。感谢。
(1)如果我不再需要数据库对象,取消设置对象会释放所有相关资源(连接/内存保存resutls等)或者我是否必须调用$mysqliResult->free()
和/或在致电$mysqliObj->close()
之前unset($mysqliObj)
。
(2)此外,如果我使用数据库抽象层,其中抽象类的成员持有mysqli对象,是否取消设置$dbAbstractionObj
释放mysql连接以进行其他脚本调用,或者我是否必须调用{ {1}}在数据库抽象类的析构函数中...我知道PHP在脚本执行结束时清理了所有内容,但是我想知道在脚本运行时执行大量的操作时是否有益处数据被提取和处理...我想说的例子:
(1)
$this->mysqli->close()
(2)
$mysqli = new Mysqli($host, $user, $pass, $database);
$result = $mysqli->query('...');
$data = $result->fetch_all(MYSQLI_ASSOC);
/* Now if i don't need $mysqli any futher but would be doing
other stuff on $data that might take a while, do I just */
unset($mysqli)
/* OR */
$result->free();
$mysqli->kill($mysqli->thread_id);
$mysqli->close();
unset($mysqli);
?>
答案 0 :(得分:0)
使用mysqli时,您可能只有一个准备好的声明/执行。如果您尝试打开并执行两个预准备语句而不关闭,则会生成错误。 在执行期间,您应该由您处理在db抽象程序之外显式打开的任何资源。也就是说,如果使用抽象程序中的信息打开连接,最佳做法是显式关闭它(但不要取消设置基本资源本身),从而释放与之关联的资源。拥有一个基本的mysql连接并不是非常消耗资源,但保持与mysql服务器的大量未关闭连接可能会导致它停止接受连接(取决于配置)。大多数执行完成后,如果在运行时未明确释放相关的mysql资源,它们将自动释放它们。
告诉我这是否有帮助,