对于我所做的每个项目,我总是在我的构造函数中加载数据库配置,如下所示
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
}
}
我需要一些关于加载数据库配置的新方法的建议。在每个函数中加载数据库时是否存在任何性能问题?或者使用安全吗?
另外,有没有建议在一个模型中为不同的函数调用不同的数据库?
答案 0 :(得分: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);
答案 1 :(得分:0)
我认为使用它是免费的,在不同的功能上使用不同的数据库配置应该没有问题,但我也期望一些性能差异,因为你的每个函数都建立了不同的数据库连接
答案 2 :(得分:0)
在每个函数中加载数据库时是否存在任何性能问题?
没有。一点也不。每个功能都单独处理。因此,DB连接没有任何性能问题。除非
使用安全吗?
无论您使用哪种方法与CodeIgniter相关联都是安全的。继续使用他们内置的函数/方法和care about their security methods
另外,有没有建议在一个模型中为不同的功能调用不同的数据库?
是的,有很多。但是没有标准(喜欢这个)方式。你现在拥有的对我来说也很完美。即使您可以在config.php
中创建这些方法并包含在模型中。但是所有这些并没有什么不同。
<强>建议强>
如果您有多个数据库连接,请将DB1保持为默认连接,并在__construct
中使用$this->load->database();
加载。每当您需要加载第二个数据库连接时,请使用$this->load->database('DB2', TRUE);
。