对于我创建的每个项目,我总是在构造函数中加载数据库配置,如下所示
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
}
}
我需要一些关于加载数据库配置的新方法的建议。当我在每个函数中加载数据库时,是否存在性能问题?或者它使用起来安全吗?
另外,有没有什么建议在一个模型中为不同的函数调用不同的数据库?
发布于 2017-12-27 14:26:32
这样做你总是会遇到一些性能损失,这是理所当然的。有多少可以通过测试确定,但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('...');
}
}
当然,如果你不需要多个配置,你可以:
如果您只需要在同一连接上使用不同的数据库,则不需要创建单独的数据库配置。您可以在需要时切换到其他数据库,如下所示:
$this->db->db_select($database2_name);
发布于 2017-12-27 12:44:11
我认为它易于使用,在不同函数上使用不同数据库配置应该没有问题,但我也希望有一些性能差异,因为您的每个函数都建立了不同的数据库连接
发布于 2017-12-27 14:39:55
当我在每个函数中加载数据库时,是否有性能问题?
不是的。不用谢。每个函数都是单独处理的。因此,DB连接不存在任何性能问题。除非
与远程server
快
使用安全吗?
无论您使用的是什么方法,与CodeIgniter关联的方法都是安全的。继续使用他们内置的函数/方法和
Plus,有没有什么建议在一个模型中为不同的函数调用不同的数据库?
是的,有很多。但是没有标准的方法(像这样做)。你现在所拥有的在我看来也是完美的。甚至您也可以在config.php
中创建这些方法并将其包含在您的模型中。但所有这些都没有什么不同。
建议
如果你有多个数据库连接,那么保持DB1作为默认连接,在__construct
中,你可以使用$this->load->database();
加载它。无论何时需要加载第二个数据库连接,都可以使用$this->load->database('DB2', TRUE);
。
https://stackoverflow.com/questions/47986245
复制相似问题