如何使用 PDO 连接到实时数据库

Posted

技术标签:

【中文标题】如何使用 PDO 连接到实时数据库【英文标题】:How to connect to a live database with PDO 【发布时间】:2018-09-12 12:35:07 【问题描述】:

我目前正在尝试将我的项目移动到实时服务器,但我遇到了以下问题

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 

我知道脚本正在连接到数据库,但它没有给我访问权限并且一直超时,我已经添加了连接到 phpmyadmin 的权限。

GRANT ALL PRIVILEGES ON `xxxxx`.* TO 'Admin'@'%' WITH GRANT OPTION;

这是我的连接信息:

"Database" => array(
      "host" => "xxx.xx.xx.xxx",
      "username" => "Admin",
      "password" => "xxxxxxxxxx",
      "database" => "xxxxx"
    ),

我知道数据库名称是正确的,因为之前的错误只会说“找不到数据库 hopp2”

$dsn = 'mysql:host='.$settings['Database']['host'].';dbname='.$settings['Database']['database'];

$pdo = new PDO($dsn,$settings['Database']['username'],$settings['Database']['password']);

任何帮助都将不胜感激,如果这是一件简单的事情,我很抱歉,因为我在这个项目的日程安排上非常紧张

User name   Host name   Password    Global privileges   User group  Grant   Action
Admin   %   Yes ALL PRIVILEGES      Yes Edit privileges Edit privileges Export Export

【问题讨论】:

这是因为默认服务器mysql不允许其他服务器访问,所以你必须让你的数据库公开访问才能访问 是的,抱歉,重新阅读问题并意识到您不只是在问一个愚蠢的问题 我会说使用具有所有这些特权的帐户来让您的网站访问数据库是非常危险的,但我假设您付出了一切努力让某些东西正常工作 我假设你已经仔细检查了 MySQL 服务器的 IP 地址。如果那不是您的帐户被允许访问的帐户,您可能会收到此类错误 @NishitManjarawala database public access 请不要这样说。数据库不应直接连接到互联网。 【参考方案1】:

对我来说,这就像一个防火墙问题。您是否检查过是否可以连接 MySQL 服务器(不使用 PHP)?:

尝试使用 telnet 连接,以测试连接:

telnet IP 3306

您至少应该建立连接(无需登录)。如果还是不行,试试看3306服务器是否接受了一个连接,但是没有响应,这说明传出的流量被阻塞了。

【讨论】:

是的,刚刚在 Windows 上尝试了 tracert 路由到那里很好,服务器只是一个数字海洋服务器,所以我正确添加了所有防火墙 但还是有同样的问题 抱歉应该补充一下DigitalOcean服务器是一键式phpmyadmin droplet 如果你从液滴本身追踪? 仍然是相同的结果,仍然没有发现问题我只是不让数据库上线到互联网,我只是这样做,所以如果系统出现故障,数据库仍然可以完好无损,我可以立即将网站的备份副本加载到数据库中。但它花了太多时间所以我已经继续前进了

以上是关于如何使用 PDO 连接到实时数据库的主要内容,如果未能解决你的问题,请参考以下文章