2016-08-06 7 views
1

Я установил экземпляр 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. Есть ли что-нибудь, что я могу проверить?

+0

Вам не хватает $ dbport = $ _SERVER ['RDS_PORT']; в php-коде? – error2007s

+0

Не должен ли он попробовать 3306 по умолчанию? –

+0

Попробуйте заменить aws-test-db.hibizibi.us-west-2.rds.amazonaws.com; dbname = test; port = 3306; в dbh, а затем посмотреть, можете ли вы подключиться? – error2007s

ответ

2

Это очень старый вопрос, но у меня была такая же проблема, и я хотел бы документировать его здесь для тех, кто находит это позже.

Проблема

  1. Вы можете подключиться к базе данных (Amazon RDS) вручную из командной строки.
  2. Вы можете подключиться к базе данных через mysqli в PHP.
  3. не подключиться к вашей базе данных через PDO в PHP.

Решение

Для меня, после попытки почти все, я случайно решил попробовать и создать нового пользователя базы данных. Это сработало, и теперь я смог подключиться через PDO.

Это побудило меня исследовать проблему немного дальше, и я смог сузить проблему до символа обратной косой черты \ в моем пароле MySQL.

Кажется, что существует какой-то конфликт между ENV Vars (с \), PHP и PDO.

Смежные вопросы