我不相信这个问题是重复的,因为我认为这个问题与共享主机环境出站到其他云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)的所有连接。
答案 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;
}