检测CodeIgniter何时无法连接到Db

Bas*_*sic 5 php pdo codeigniter

我有一个CI实例连接到Db并在提供页面之前检查权限.如果当前用户无法访问该页面,则会重定向到登录页面.

显然,登录页面设置了权限,以便所有用户都可以访问.

在最近出现故障后,数据库服务器恢复了不同的IP地址(谢谢Amazon,EC2).这导致CI无法检查任何页面的权限 - 包括登录.由于代码假定除了Yes之外的任何内容都是No,它会重定向到Login.结果是无限重定向循环.

虽然这个确切的问题不应再发生(静态弹性IP),但我想检测Db连接何时关闭并正确处理它.

我已经看到了这个SO问题,这是我想要实现的,但我没有明确地在任何控制器中加载数据库,它在自动加载配置文件中.

所以,

如何从CI内部查询Db连接的状态?我是否必须运行无用的查询并检查是否返回结果或是否有更优雅的解决方案?

编辑:检查当前正在钩子中执行:

$hook['post_controller_constructor'] = array(
                                'class'    => 'AuthHook',
                                'function' => 'ValidateCredentials',
                                'filename' => 'auth.php',
                                'filepath' => 'hooks'
                                );
Run Code Online (Sandbox Code Playgroud)

Yan*_*erk 6

您可以扩展控制器并在其构造函数中加载数据库:

    class My_Controller extends CI_Controller {
        public function __construct(){
            parent::__construct();
             if ( $this->load->database() === FALSE )
             {
                //do something
             }
         }
     }
Run Code Online (Sandbox Code Playgroud)

所有控制器都将继承新控制器.


Lau*_*nce 2

“由于代码假定“是”以外的任何内容都是“否”,因此它会重定向到“登录”。”

因此,您只需要更改登录逻辑函数来专门检查数据库连接(因此仍然自动加载数据库)。

使用类似的东西

 $result = $this->db->conn_id;  
Run Code Online (Sandbox Code Playgroud)

  • 实际上它是假的 - 所以你可以做“if (! $this->db->conn_id)) (3认同)