I’ve got a CI instance which connects to a Db and checks permissions before serving pages. If the page isn’t accessible to the current user, it redirects to a login page.
The login page, obviously, has permissions set so that it’s accessible to all users.
After a recent glitch, the database server came back up on a different IP address (thank you Amazon, EC2). This resulted in CI being unable to check permissions for any page – including Login. Since the code assumes anything other than a Yes is a No, it redirected to Login. The result was an infinite redirect loop.
While this exact problem shouldn’t happen again (Static elastic IP), I’d like to detect when the Db connection is down and handle it appropriately.
I’ve seen This SO Question which is what I’m trying to achieve but I’m not explicitly loading the database in any controllers, it’s in the autoload config file.
So,
How can I query the state of the Db connection from inside CI? Do I have to run a useless query and check if I get results back or is there a more elegant solution?
Edit: The check is currently being performed in a hook:
$hook['post_controller_constructor'] = array(
'class' => 'AuthHook',
'function' => 'ValidateCredentials',
'filename' => 'auth.php',
'filepath' => 'hooks'
);
“Since the code assumes anything other than a Yes is a No, it redirected to Login.”
So therefore you only need to alter the login logic function to specifically check for a DB connection (and thus still auto-load the database).
Use something like