首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Codeigniter Load Database in Construct Load Database in Function

Codeigniter Load Database in Construct Load Database in Function
EN

Stack Overflow用户
提问于 2017-12-27 12:15:42
回答 3查看 1.3K关注 0票数 1

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

代码语言:javascript
运行
复制
public function __construct() {
    parent::__construct();
    $this->load->database();
}

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

代码语言:javascript
运行
复制
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
    }
}

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

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

EN

回答 3

Stack Overflow用户

发布于 2017-12-27 14:26:32

这样做你总是会遇到一些性能损失,这是理所当然的。有多少可以通过测试确定,但CI分析器可能会帮助您弄清楚这一点。

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

代码语言:javascript
运行
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2017-12-27 12:44:11

我认为它易于使用,在不同函数上使用不同数据库配置应该没有问题,但我也希望有一些性能差异,因为您的每个函数都建立了不同的数据库连接

票数 0
EN

Stack Overflow用户

发布于 2017-12-27 14:39:55

当我在每个函数中加载数据库时,是否有性能问题?

不是的。不用谢。每个函数都是单独处理的。因此,DB连接不存在任何性能问题。除非

与远程server

  • DB is not fully compatible with PHP.的
  1. DB连接(表示MySQL的处理速度比Oracle)
  2. Worst case memory leak in code

使用安全吗?

无论您使用的是什么方法,与CodeIgniter关联的方法都是安全的。继续使用他们内置的函数/方法和

Plus,有没有什么建议在一个模型中为不同的函数调用不同的数据库?

是的,有很多。但是没有标准的方法(像这样做)。你现在所拥有的在我看来也是完美的。甚至您也可以在config.php中创建这些方法并将其包含在您的模型中。但所有这些都没有什么不同。

建议

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47986245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档