Я установил экземпляр RDS MySQL в AWS. После экземпляра экземпляра я попытался подключить его из командной строки EC2, и он не работает без проблем. Однако, когда я пытаюсь подключиться через свой PHP-код, я получаю erros. Ниже приведен пример кода, который я пытался проверить на подключение.Невозможно подключиться к AWS RDS через PDO
<?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')
UPDATE
Я обновил мой тестовый код, чтобы попробовать подключения с помощью 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. Есть ли что-нибудь, что я могу проверить?
Вам не хватает $ dbport = $ _SERVER ['RDS_PORT']; в php-коде? – error2007s
Не должен ли он попробовать 3306 по умолчанию? –
Попробуйте заменить aws-test-db.hibizibi.us-west-2.rds.amazonaws.com; dbname = test; port = 3306; в dbh, а затем посмотреть, можете ли вы подключиться? – error2007s