我在 AWS 中设置了一个 MySQL RDS 实例。实例化实例后,我尝试从我的 EC2 命令行连接它并且它没有问题。但是,当我尝试通过我的 PHP 代码进行连接时,出现错误。下面是我尝试测试连接性的示例代码。
<?php
try{
$dbh = new pdo( 'aws-test-db.hibizibi.us-west-2.rds.amazonaws.com;dbname=test',
'root',
'password',
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
die(json_encode(array('outcome' => true)));
}
catch(PDOException $ex){
die(json_encode(array('outcome' => false, 'message' => 'Unable to connect')));
}
我得到 {"outcome":false,"message":"Unable to connect"}
。我的原始代码使用的是 idiorm (使用 PDO)。与数据库连接的部分如下所示:
# configure ORM
ORM::configure('mysql:host='.DB_SERVER.';dbname='.DB_NAME);
ORM::configure('username', DB_SERVER_USERNAME);
ORM::configure('password', DB_SERVER_PASSWORD);
从上面我得到以下错误跟踪:
SQLSTATE[HY000] [2005] Unknown MySQL server host 'aws-test-db.hibizibi.us-west-2.rds.amazonaws.com:3306' (11)
#0 /var/www/html/main/admin/applications/vendors/idiorm/idiorm.php(255): PDO->__construct('mysql:host=aws-...', 'root', 'password', NULL)
#1 /var/www/html/main/admin/applications/vendors/idiorm/idiorm.php(237): ORM::_setup_db('default')
更新
我更新了我的测试代码以尝试使用 mysql 扩展进行连接,它可以使用 mysql 但不能使用 PDO
<?php
$servername = "aws-test-db.hizibizi.us-west-2.rds.amazonaws.com";
$username = "root";
$password = "password";
$dbname='test';
try{
$dbh = new pdo(
'mysql:'.$servername.';dbname='.$dbname.';',
$username,
$password,
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);
die(json_encode(array('outcome' => true)));
} catch(PDOException $ex) {
echo json_encode(array('outcome' => false, 'message' => $ex->getMessage()))."\n";
}
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully\n";
现在,我得到 {"outcome":false,"message":"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '\/var\/lib\/mysql\/mysql.sock' (2)"}
尝试通过 PDO 连接时。我通过 mysql 的尝试是成功的。似乎问题出在 PDO 上。有什么我可以检查的吗?
最佳答案
这是一个非常古老的问题,但我遇到了完全相同的问题,并想在此处记录下来以供以后发现此问题的任何人使用。
问题
- 您可以从命令行手动连接到您的数据库 (Amazon RDS)。
- 您可以通过 PHP 中的 mysqli 连接到您的数据库。
- 您不能不通过 PHP 中的 PDO 连接到您的数据库。
解决方案
对我来说,在尝试了几乎所有方法之后,我随机决定尝试创建一个新的数据库用户。这行得通,我现在可以通过 PDO 进行连接了。
这促使我进一步调查这个问题,我能够将问题缩小到我的 MySQL 密码中的反斜杠 \
字符。
ENV Vars(\
)、PHP 和 PDO 之间似乎存在某种冲突。
关于php - 无法通过 PDO 连接到 AWS RDS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38809418/