【问题标题】:Codeigniter: Connect to SSL Amazon RDS DatabaseCodeigniter:连接到 SSL Amazon RDS 数据库
【发布时间】:2012-03-01 20:51:06
【问题描述】:

我无法从我的 Codeigniter 应用程序连接到 Amazons RDS 服务。

数据库配置中的设置:

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

我创建了following changes 以让mysqli 使用 SSL:

我很惊讶它连接成功,因为它抱怨数据库选择。不知道从这里去哪里?

我在 Windows 机器上使用 PHP 5.3.8

更新

这更像是一个错误,而不是我的实现问题。如果我将$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;

【问题讨论】:

  • 你能发布你的数据库配置设置吗?
  • 也许这个能给你一些启发...codeigniter.com/forums/viewthread/102232
  • 我读了那篇文章,那是我关注的。它应该像其他人一样工作,但对我来说有一些阻碍,不知道如何调试它!
  • 你开启登录了吗?如果开启了,你能发布日志看看发生了什么吗?
  • 在我发布的链接上,有配置行 mysqli_ssl_set($init, '/etc/ssl/mysql/client-key.pem', '/etc/ssl/mysql/client-cert .pem', '/etc/ssl/mysql/ca-cert.pem', NULL, NULL);这是 3 个键,但在您的配置中只有 mysql-ssl-ca-cert.pem....这是您需要查看的内容吗?

标签: php codeigniter ssl amazon-rds


【解决方案1】:
$db['default']['port'] = 3306;

尝试将其添加到数据库配置中。 mysql_real_connect() 期望参数 6 为 LONG int;对空字符串犹豫不决。


更新

DB_Driver 中第 140 行以下的函数是设置 dbcollat​​ 和 charset 的地方。这些将在驱动程序中命中 real_escape,如果不正确,则会导致 escape_error。

试试

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

或者,检查您的数据库的编码是否设置为您的数据库配置中的内容。即,如果您的 db 字符集是 latin1 并且您使用的是 utf-8,则 conn_id 将是错误的,并且 mysqli_escape 将停止。

【讨论】:

  • 不幸的是,这不起作用。 :( 我不知道下一步该尝试什么。
  • 不认识……我完成了全新本地安装的所有步骤,但不是在 Windows 上。我完成了这些步骤,并且得到了相同的can't find db 错误,以及 CI 日志中的 param 6 错误;一旦将端口添加到配置中,它就可以工作。检查:ca_cert 文件的位置/权限(我将 NULL 留在这里;如果我设置为错误的路径,我会收到 unable to connect with settings 错误,而不是无法找到 db)。最后(也许是最重要的),如果你碰巧在使用 XAMPP,那么 SSL 就很棘手:apachefriends.org/f/viewtopic.php?f=16&t=42946#p169097
  • 感谢您的尝试。 :) 我尝试了上述方法,但不幸的是没有运气。我不敢相信codeigniter 遇到了麻烦。我要试试doctrine + codeigniter。
  • 您在日志中看到log_message('error', 'Unable to select database: '.$this->database); 吗?还是只是转义错误?
  • 天哪,这太尴尬了!我将日志记录设置为4,我发现了这个错误:streams.crypto this stream does not support SSL/crypto,这基本上意味着我只需要做extension=php_openssl.dll。失败。感谢您告诉我检查日志stormdrain!设置$db['default']['port'] = 3306;非常很重要,否则它将不起作用,您将收到相同的错误。
【解决方案2】:

如果使用 Codeigniter 3.* 配置数据库文件不同:

$db['default']['encrypt']['ssl_set'] = true;
$db['default']['encrypt']['ssl_key'] = NULL;
$db['default']['encrypt']['ssl_cert'] = NULL;
$db['default']['encrypt']['ssl_ca'] = realpath('./application/third_party/sert/CA.pem');
$db['default']['encrypt']['ssl_capath'] = NULL;
$db['default']['encrypt']['ssl_cipher'] = NULL;

【讨论】:

    猜你喜欢
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多