Codeigniter在构造中加载数据库与函数中的加载数据库

问题描述 投票:0回答:3

对于我创建的每个项目,我总是在我的构造函数中加载数据库配置,如下所示

public function __construct() {
    parent::__construct();
    $this->load->database();
}

出于某种原因,我想为一个模型中的每个函数加载不同的配置,如下所示

class Something_model extends CI_Model {

    public function __construct() {
        parent::__construct();
    }

    public function getAll() {
        $this->load->database('DB1', TRUE);
        // some code to be executed
    }

    public function getPart() {
        $this->load->database('DB2', TRUE);
        // some code to be executed
    }
}

我需要一些关于加载数据库配置的新方法的建议。在每个函数中加载数据库时是否存在任何性能问题?或者使用安全吗?

另外,有没有建议在一个模型中为不同的功能调用不同的数据库?

php database codeigniter
3个回答
1
投票

通过这样做,你将永远经历一些性能损失,它只是课程的标准。通过测试可以确定多少,但CI剖析器可能可以帮助您解决这个问题。

但是,如果您只使用几个不同的数据库并经常使用它们,您可以从MY_Controller全局初始化它们中受益,这样您就不必在每次调用函数时初始化连接。

class MY_Controller extends CI_Controller {
    public $DB1, $DB2;

    public function __construct() {
        parent::__construct();
        $this->DB1 = $this->load->database('DB1', TRUE);
        $this->DB2 = $this->load->database('DB2', TRUE);
    }

}

class Some_controller extends MY_Controller {

    public function __construct() {
        $this->load->model('somemodel');
    }

}

//https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases
class Some_model extends CI_Model {

    public function access_db_1() {
        $this->DB1->query('...');
    }

    public function access_db_2() {
        $this->DB2->query('...');
    }

}

当然,如果您不需要多个配置,您可以:

如果只需要在同一连接上使用不同的数据库,则无需创建单独的数据库配置。您可以在需要时切换到其他数据库,如下所示:

$这 - > DB-> db_select($ database2_name);


0
投票

我认为使用它是免费的,在不同的功能上使用不同的数据库配置应该没有问题,但我也期望一些性能差异,因为你的每个函数都会产生不同的数据库连接


0
投票

在每个函数中加载数据库时是否存在任何性能问题?

一点都不。每个功能都单独处理。因此,DB连接没有任何性能问题。除非

  1. 数据库与远程服务器连接
  2. DB is not fully compatible with PHP。 (意味着MySQL比Oracle更快地对待)
  3. Worst case memory leak in code

使用安全吗?

无论您使用哪种方法与CodeIgniter相关联都是安全的。继续使用他们内置的功能/方法和care about their security methods


另外,有没有建议在一个模型中为不同的功能调用不同的数据库?

是的,有很多。但是没有标准(做这样的)方式。你现在拥有的对我来说也很完美。即使你可以在config.php中创建这些方法并包含在你的模型中。但是所有这些并没有什么不同。


建议

如果您有多个数据库连接,那么将DB1保持为默认连接,在__construct中,您可以使用$this->load->database();加载它。每当您需要加载第二个数据库连接时,请使用$this->load->database('DB2', TRUE);

© www.soinside.com 2019 - 2024. All rights reserved.