Codeigniter: подключение к базе данных Amazon RDS по SSL - PullRequest
6 голосов
/ 02 марта 2012

У меня проблемы с подключением к сервису Amazons RDS из моего приложения Codeigniter.

Настройки в конфигурации базы данных:

$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;

Однако при подключении.Я получаю сообщение:

Невозможно выбрать указанную базу данных: Имя промежуточного файла: ... \ system \ database \ DB_driver.php Номер строки: 140

Строка 40здесь показано:

    // 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;
        }

Я внес следующие изменения , чтобы заставить mysqli работать с SSL:

Я удивлен, что он успешно подключился, так как жалуется навыбор базы данных.Хотя вы не знаете, куда идти?

Я использую PHP 5.3.8 на машине с Windows.

Обновление

Это больше превращается в ошибку, чемпроблема с моей реализацией.Если я установлю $db['default']['db_debug'] на false.У меня больше нет этой проблемы.Тем не менее, я получаю несколько предупреждений:

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

Это означает, что было неудачное соединение с базой данных через SSL.

Обновление 2

Я используюXAMPP.

И я использую Codeingiter 2.0.2.

Обновление 3

Файл конфигурации моей базы данных:

$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;

1 Ответ

5 голосов
/ 07 марта 2012
$db['default']['port'] = 3306;

Попробуйте добавить это в конфигурацию базы данных. mysql_real_connect() ожидает, что параметр 6 будет LONG int; бьет по пустой строке.


Обновление

Функция под строкой 140 в DB_Driver - это место, где установлены dbcollat ​​и charset. Они попадут в real_escape в драйвере и вызовут escape_error, если не верны.

Попробуйте

$db['default']['dbcollat']='';

Или проверьте, что кодировка вашего db установлена ​​в соответствии с тем, что у вас есть в вашей конфигурации db. то есть, если ваша кодировка db - latin1, а вы используете utf-8, conn_id будет неправильным, а mysqli_escape будет блокироваться.

...