无法使用在线托管的PHP文件连接AWS RDS(GoDaddy)

时间:2015-11-06 01:21:20

标签: php mysql amazon-web-services pdo database-connection

我不相信这个问题是重复的,因为我认为这个问题与共享主机环境出站到其他云mysql服务器有关。

错误消息

  

PDO异常:SQLSTATE [HY000] [2002]连接超时。

我只是想连接到我的AWS RDS实例并在我的一个表上运行查询。

解决方案:GODADDY在标准帐户上阻止除21和22(FTP)之外的所有端口。这就是GODADDY技术支持所告诉我的。 HENCE,它将阻止1234端口,甚至3306用于数据库连接。

更新:

@Drew已验证此php代码适用于连接:

try {
        $db = new PDO('mysql:host=uwmparkingbackend.cb7gmuw49vhs.us-east-1.rds.amazonaws.com;port=1234;dbname=uwm_parking;charset=utf8', 'fbgrecojr', 'test1234');
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

        echo "Connected and Happy<br>";
        $sql="select id,thing from thingsCoveted where id in (1,3)";
        foreach ($db->query($sql) as $row) {
            print $row['id'] . "\t";
            print $row['thing'] . "<br>";
        }

    } catch (PDOException $e) {
        echo 'PDO Exception: ' . $e->getMessage();
        exit();
    }

但是我得到了这个错误:

PDO Exception: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'uwmparkingbackend.cb7gmuw49vhs.us-east-1.rds.amazonaws.com' (110)

因此,Godaddy方面(托管.php的地方)或AWS RDS方(托管数据库的地方)存在配置问题;

我尝试过的事情: 1)检查以确保在GoDaddy的php设置中选择了所有PDO选项 2)为我的AWS RDS安全组添加了入站规则,以允许使用我的端口(1234)的所有连接。

1 个答案:

答案 0 :(得分:0)

问题是您是否已将连接信息复制并粘贴到亚马逊在$ _SERVER数组中给出的示例中。

// Example
$link = mysqli_connect($_SERVER['RDS_HOSTNAME'], $_SERVER['RDS_USERNAME'], $_SERVER['RDS_PASSWORD'], $_SERVER['RDS_DB_NAME'], $_SERVER['RDS_PORT']);                        

// What yours should be
mysqli_connect(
    '***********.******.us-east-1.rds.amazonaws.com', 
    '*******',
    '********',
    'dbname', 
    '1234'
);

您还需要使用mysqli函数,因为这是您连接的方式,例如: http://php.net/manual/en/mysqli.query.php

编辑: 现在您正在使用PDO,您需要采用不同的方法来获取数据。

$dbhost = '***********.******.us-east-1.rds.amazonaws.com';
$dbport = 3306;
$dbname = '*****';

$dsn = "mysql:host={$dbhost};port={$dbport};dbname={$dbname}";
$username = '*****';
$password = '*****';

try {

    $dbh = new PDO($dsn, $username, $password);
    $query = $dbh->query("SELECT num_spaces FROM uwm_parking.lots");
    while($row = $query->fetch(PDO::FETCH_OBJ)) {
        var_dump( $row );
    }
} catch(PDOException  $e ){
    echo "Error: ".$e;
}