I’m having trouble making a connection to Amazons RDS service from my Codeigniter application.
Settings in database config:
$db['default']['ssl_set'] = TRUE;
$db['default']['ssl_key'] = NULL;
$db['default']['ssl_cert'] = NULL;
$db['default']['ssl_ca'] = realpath('./application/third_party/mysql-ssl-ca-cert.pem');
$db['default']['ssl_capath'] = NULL;
$db['default']['ssl_cipher'] = NULL;
However, when I connect. I get the message:
Unable to select the specified database: Staging
Filename: …\system\database\DB_driver.php
Line Number: 140
Line 40 is shown here:
// Select the DB... assuming a database name is specified in the config file
if ($this->database != '')
{
if ( ! $this->db_select())
{
log_message('error', 'Unable to select database: '.$this->database);
if ($this->db_debug)
{
$this->display_error('db_unable_to_select', $this->database); // LINE 140
}
return FALSE;
}
I made the following changes to get mysqli working with SSL:
I’m suprised it connected successfully as its complaining about database selection. Not sure where to go from here though?
I’m using PHP 5.3.8 on a windows machine.
Update
This is turning more into a bug than a problem with my implementation. If I set the $db['default']['db_debug'] to false. I don’t get that problem anymore. However, I get a bunch warnings to do with:
Severity: Warning
Message: mysqli_real_escape_string() [function.mysqli-real-escape-string]: invalid object or resource mysqli
Filename: mysqli/mysqli_driver.php
Line Number: 346
Which means there was an unsuccessful connection to the database over SSL.
Update 2
I am using XAMPP.
And I am using Codeingiter 2.0.2.
Update 3
My database config file:
$db['default']['hostname'] = 'xxxx.us-east-1.rds.amazonaws.com';
$db['default']['username'] = 'xxxxx';
$db['default']['password'] = 'xxxx';
$db['default']['database'] = 'xxxx';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['port'] = 3306;
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = true;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
$db['default']['ssl_set'] = true;
$db['default']['ssl_key'] = NULL;
$db['default']['ssl_cert'] = NULL;
$db['default']['ssl_ca'] = realpath('./application/third_party/mysql-ssl-ca-cert.pem');
$db['default']['ssl_capath'] = NULL;
$db['default']['ssl_cipher'] = NULL;
Try adding that to db config.
mysql_real_connect()expects param 6 to be a LONG int; balks at empty string.Update
The function below line 140 in DB_Driver is where the dbcollat and charset are set. Those will hit real_escape in the driver, and cause the escape_error if not correct.
Try
Or, check that the encoding your db is set for what you have in your db config. i.e. if your db charset is latin1 and you are using utf-8, the conn_id will be wrong and mysqli_escape will balk.