将Godaddy主机上的PHP脚本连接到Amazon RDS不起作用

将Godaddy主机上的PHP脚本连接到Amazon RDS不起作用,php,pdo,amazon-rds,Php,Pdo,Amazon Rds,最初,我在Godaddy上使用了一个非常古老的经典linux托管帐户。我所有的PHP脚本都可以很好地连接到我的AmazonRDS 我刚刚将我的Godaddy主机升级到他们今天提供的最新共享主机,PHP脚本似乎不再工作了 我确实在AWS RDS实例的安全组中将新的Godaddy托管帐户IP添加到入站/出站IP列表中,但我收到以下错误(我仅用连字符替换了第一部分): 我的PHP脚本顶部包含以下内容: define("DB_HOST", "---------------.us-west-1.rds.a

最初,我在Godaddy上使用了一个非常古老的经典linux托管帐户。我所有的PHP脚本都可以很好地连接到我的AmazonRDS

我刚刚将我的Godaddy主机升级到他们今天提供的最新共享主机,PHP脚本似乎不再工作了

我确实在AWS RDS实例的安全组中将新的Godaddy托管帐户IP添加到入站/出站IP列表中,但我收到以下错误(我仅用连字符替换了第一部分):

我的PHP脚本顶部包含以下内容:

define("DB_HOST", "---------------.us-west-1.rds.amazonaws.com");
define("DB_USER", "-------------");
define("DB_PASS", "-------------");
define("DB_NAME", "-------------");

try {
    $GLOBALS['_pdo_conn'] = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
    // Set the PDO error mode to exception
    $GLOBALS['_pdo_conn']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected Successfully!";   
}
catch(PDOException $e) {
    echo "Conection failed: " . $e->getMessage();
}
我还尝试手动添加端口号:

define("DB_HOST", "---------------.us-west-1.rds.amazonaws.com");
define("DB_USER", "-------------");
define("DB_PASS", "-------------");
define("DB_NAME", "-------------");

try {
    $GLOBALS['_pdo_conn'] = new PDO("mysql:host=".DB_HOST.";port=3306;dbname=".DB_NAME, DB_USER, DB_PASS);
    // Set the PDO error mode to exception
    $GLOBALS['_pdo_conn']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected Successfully!";   
}
catch(PDOException $e) {
    echo "Conection failed: " . $e->getMessage();
}
我已经检查并重新检查了IP,以确保它是正确的,但无论我如何尝试,我似乎都无法让它连接到Amazon RDS

是Godaddy阻止了还是我在设置中遗漏了什么

编辑:我自己解决了(请参见下面的回答)

您必须转到Amazon RDS设置中的“DB安全组”,并允许您的EC2实例或特定IP(通过其CIDR/IP设置)访问DBs


默认情况下,RDS拒绝访问任何外部计算机,包括您自己的EC2实例,直到您正确设置安全设置。

因为我与多家不同的公司有多个主机,我能够从我的Godaddy帐户上的php脚本向另一家公司的另一个托管帐户发出一个简单的curl请求,以查看Godaddy发出curl请求时的实际IP是多少

结果表明,IP与cpanel仪表板上提供的IP Godaddy不同。不知道为什么会这样。我唯一的猜测是Godaddy试图让经验不足的客户更难找到这个IP


将我找到的这个IP添加到我的Amazon安全组入站/出站列表中修复了这个问题。

只需使用PHP脚本即可


您是否已尝试在本地主机上连接到RDS。我想远程连接可能有问题。请检查您的本地,如果它工作,那么它可能是从您的托管端的问题。是的,我在我的Godaddy帐户托管多个网站。一些使用Godaddy的数据库,一些使用我的Amazon AWS RDS实例。Godaddy数据库连接通过localhost正常工作。您需要更新RDS“DB安全组”中的安全组,并添加Godaddy主机的IP,然后重试。确保您连接3306的端口已打开并正在运行。已经这样做了,RamaKrishan(参见原始帖子的第3段)Ok。你可以联系godaddy主机,好像他们在连接RDS时遇到了问题。我已经这样做了。我在不同的托管公司有多个托管帐户,所以我已经知道我需要将每个托管帐户的IP添加到Amazon AWS DB安全组。你可以允许所有IP。这太危险了。我不希望整个世界都能访问我的Amazon RDSI see。我认为您只需要允许PHP代码打开连接的主机的IP。但是你可以先让所有人都知道你的问题与AWS安全相关。谢谢你的提示,DucFilan。在AWS安全组中将入站/出站IP设置为0.0.0.0/0确实可以解决此问题。也许我的Godaddy主机上显示的IP不是服务器的实际IP。这种情况对我来说太奇怪了。我会问戈达迪,如果IP是不正确的。像一个魅力工程。
define("DB_HOST", "---------------.us-west-1.rds.amazonaws.com");
define("DB_USER", "-------------");
define("DB_PASS", "-------------");
define("DB_NAME", "-------------");

try {
    $GLOBALS['_pdo_conn'] = new PDO("mysql:host=".DB_HOST.";port=3306;dbname=".DB_NAME, DB_USER, DB_PASS);
    // Set the PDO error mode to exception
    $GLOBALS['_pdo_conn']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected Successfully!";   
}
catch(PDOException $e) {
    echo "Conection failed: " . $e->getMessage();
}