gpt4 book ai didi

php - 克隆 CodeIgniter 的数据库对象

转载 作者:可可西里 更新时间:2023-10-31 23:22:31 24 4
gpt4 key购买 nike

我正在为 CodeIgniter ( link to project ) 开发一个子查询库,它通过返回数据库对象来工作,您可以使用这些对象来代替普通的 $this->db 对象。

最初,我每次都在创建新的数据库对象:

$this->CI =& get_instance();
$db = $this->CI->load->database('', true);

但是我随后意识到(或者更确切地说有人向我指出)这每次都会建立一个新的数据库连接!所以我决定尝试克隆对象而不是创建新对象。

我将代码更新为如下所示 ( link to full code ):

class Subquery{
var $CI, $db;

function __construct(){
$this->CI =& get_instance();
$this->db = $this->CI->db; // Default database connection
}

function start_subquery(){
$newDatabase = clone $this->db;
// some more code
return $newDatabase;
}
}

我测试了这个,它似乎可以工作,但我不确定这是否能解决问题。使用 clone 是建立一个新的数据库连接,还是在内部使用引用并只保留一个连接?

最佳答案

首先,如果您不使用 PHP 4,=& 是不必要的并且可能有害(我假设 get_instance 返回一个对象)。

至于clone是否创建新连接..这取决于DB实现。据我所知,PDO 在克隆时不会创建额外的连接。如果您想对此进行测试,请创建一个小脚本来运行 start_subquery 以达到某种效果,然后休眠一段时间。连接到 mysql 并运行:

SHOW STATUS WHERE `variable_name` = 'Threads_connected'

如果它超过 2 个(运行查询的连接和脚本中的连接),则出于某种原因正在建立一个额外的连接。

至于是否你应该克隆数据库,我不知道你为什么想要,但我真的不知道这个类的用例,我也不太了解 CI .

关于php - 克隆 CodeIgniter 的数据库对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13846539/

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