2

我在从Zend Framework 2 教程应用程序连接到我的 Amazon RDS 数据库时遇到问题。

我不断收到以下错误:

PDOException: SQLSTATE[28000] [1045] Access denied for user 'db_user'@'localhost' (using password: YES) in C:\wamp\www\zf2-tutorial\vendor\ZendFramework\library\Zend\Db\Adapter\Driver\Pdo\Connection.php on line 214

我使用 MySQL Workbench 或 Toad 连接到数据库没有问题,所以我认为数据库安全组不是问题。此外,PHP 应用程序也可以很好地连接到本地数据库。

我想知道为什么错误消息说db_user'@'localhost。不应该说db_user'@'RDS host url吗?

我的连接字符串是:

'driver' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:hostname=xxxxxxxx.xxxxxxxxx.us-east-1.rds.amazonaws.com;dbname=zf2-tutorial',
'username' => 'db_user',
'password' => 'xxxxxxx',
'driver_options' => array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
4

3 回答 3

2

原来问题出在 dsn 字符串中,与其他 MySQL 服务器不同,Amazon RDS 不理解“主机名”。如果更改为“主机”,它就可以正常工作!

'dsn' => 'mysql:主机=xxxxxxxx.xxxxxxxxx.us-east-1.rds.amazonaws.com;dbname=zf2-tutorial',

感谢所有的建议。

于 2012-05-08T07:18:50.033 回答
1

根据 Zend 的文档,将主机变量添加到您的配置中

'driver' => array(
    'driver' => 'Pdo',
    'dsn' => 'mysql:hostname=xxxxxxxx.xxxxxxxxx.us-east-1.rds.amazonaws.com;dbname=zf2-tutorial',
    'username' => 'db_user',
    'password' => 'xxxxxxx',
    'host'  => 'xxxxxxxx.xxxxxxxxx.us-east-1.rds.amazonaws.com', // Possible here
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
    ),
),
'host'  => 'xxxxxxxx.xxxxxxxxx.us-east-1.rds.amazonaws.com', // Most likely here
于 2012-05-07T01:10:42.953 回答
1

MySQL PDO DSN 需要host,而不是 hostname:

http://php.net/manual/en/ref.pdo-mysql.connection.php

我刚刚在 ZF2 教程之后犯了同样的错误,对为什么配置忽略主机名更改感到困惑,直到我阅读 PHP PDO 文档,将其更改为主机(如您所见)并且神奇地一切正常

于 2012-06-13T22:00:47.973 回答