2016-08-06 201 views
1

我在AWS中设置了MySQL RDS实例。在实例化实例后,我尝试从EC2的命令行连接它,并且它没有问题。但是,当我尝试通过我的PHP代码连接时,我得到了错误。以下是我尝试测试连接的示例代码。无法通过PDO连接到AWS RDS

<?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"; 

现在,我在尝试通过PDO进行连接时得到了{"outcome":false,"message":"SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '\/var\/lib\/mysql\/mysql.sock' (2)"}。我通过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. 您可以连接到你的数据库(亚马逊RDS)在命令行手动。
  2. 您可以通过PHP中的mysqli连接到您的数据库。
  3. 您可以不是通过PHP中的PDO连接到您的数据库。

解决方案

对于我来说,尝试几乎所有的东西后,我随机决定尝试并创建一个新的数据库用户。这工作,我现在可以通过PDO连接。

这促使我进一步调查问题,我能够将问题缩小到我的MySQL密码中的反斜杠\字符。

ENV Vars(与\),PHP和PDO之间似乎存在某种冲突。