我正在学习php/mysql。我似乎找不到一个明确的答案来回答一些问题。你能给我澄清一些吗?或者告诉我一个可靠的来源。谢谢。
(1)如果我不再需要数据库对象,取消设置该对象是否会释放所有相关资源(连接/内存占用资源等)或者我必须在调用unset($mysqliObj)之前调用$mysqliResult->free()和/或$mysqliObj->close()。
(2)另外,如果我使用数据库抽象层,其中抽象类的成员持有mysqli对象,取消设置$dbAbstractionObj是否会释放mysql连接以供其他脚本调用,或者我是否必须在数据库抽象类的析构函数中调用$this->mysqli->close()……我知道PHP会在脚本执行结束时清理所有的东西,但是我想知道在脚本运行的时候,在获取和处理大量数据的时候,这样做是否有好处……下面是我想说的例子:
(1)
$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);
?>(2)
<?php
class Database {
private $mysqli;
public function __construct(array $config) {
if (!$this->mysqli = new mysqli($config['host'], $config['user'], $config['pass'], $config['database'])) {
throw new Exception("Couldn't connect to database");
}
}
/* do i need a destructor to close the connection when i unset the
Database object... like */
public function __destruct() {
$this->mysqli->kill($this->mysqli->thread_id);
$this->mysqli->close();
}
/* other methods for select, update, insert, delete */
}
?>发布于 2013-11-10 04:16:32
在使用mysqli时,一次只能有一个准备好的语句/执行。如果您试图打开并执行两个准备好的语句而不关闭,您将生成一个错误。您在db抽象器之后显式打开的任何资源都应该在执行期间由您处理。也就是说,如果您使用抽象器中的信息打开一个连接,最佳实践是显式地关闭它(但不是取消设置基础资源本身),从而释放与其关联的资源。拥有一个基本的mysql连接并不是非常消耗资源,但是保持大量未关闭的到mysql服务器的连接可能会导致它停止接受连接(取决于配置)。大多数执行完成后,如果在运行时没有显式释放相关的mysql资源,则会自动释放这些资源。
告诉我这有没有帮助,
https://stackoverflow.com/questions/17535036
复制相似问题