加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 克隆CodeIgniter的数据库对象

发布时间:2021-08-28 03:48:56 所属栏目:大数据 来源: https://www.jb51.cc
导读:我正在为CodeIgniter(link to project)创建一个子查询库,它通过返回可以使用的数据库对象而不是普通的$this- db对象来工作. 最初,我每次都在制作新的数据库对象: $this-CI = get_instance();$db = $this-CI-load-database('', true); 但我后来意识到(或者更

我正在为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是否创建新连接..这取决于数据库实现.据我所知,PDO在克隆时不会创建额外的连接.如果你想测试它,创建一个小脚本,运行start_subquery到某种效果,然后睡觉相当长的时间.连接到MysqL并运行:

SHOW STATUS WHERE `variable_name` = 'Threads_connected'

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

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

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读