我正在学习 php/mysql。对于某些问题,我似乎没有找到明确的答案。您能否为我澄清其中的一些问题或为我指出可靠的来源。谢谢。
(1) 如果我不再需要数据库对象,是取消设置对象释放所有相关资源(连接/内存保持结果等)还是我必须调用 $mysqliResult->free ()
和/或 $mysqliObj->close()
在调用 unset($mysqliObj)
之前。
(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 */
}
?>
最佳答案
当使用 mysqli 时,您一次只能有一个准备好的语句/执行。如果您尝试在不关闭的情况下打开并执行两个准备好的语句,则会产生错误。 您在数据库抽象器之后显式打开的任何资源都应在执行期间由您处理。也就是说,如果您使用抽象器中的信息打开一个连接,最好的做法是显式关闭它(但不要取消设置基本资源本身),从而释放与其关联的资源。拥有一个基本的 mysql 连接并不是很耗费资源,但是与 mysql 服务器保持大量未关闭的连接会导致它停止接受连接(取决于配置)。如果您在运行时未明确释放关联的 mysql 资源,则大多数执行在完成后将自动释放它们。
告诉我这是否有帮助,
关于php - 在取消设置 mysql 对象之前释放结果并关闭连接,或者只是取消设置会破坏对象 n 释放资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535036/