【问题标题】:Constructor failed on creating a new PDO connection构造函数创建新的 PDO 连接失败
【发布时间】:2021-08-18 11:43:45
【问题描述】:

我正在尝试访问远程 MySQL 服务器。我在远程服务器中创建了一个用户,并将所有远程权限授予所有主机。 这是我连接数据库的代码:

<?php
try{
    $dsn = "mysql:host=MY_REMOTE_SERVER_IP;dbname=DB_NAME;port=3306";
    $db = new PDO($dsn, 'USER_NAME','PASSWORD');
}catch(Exception $e){
    echo $e->getMessage();
}

代码在我的本地主机上运行良好。我什至在Playgrounds 上尝试了代码,它运行良好。但在我的website 上,它不起作用。网站连接不上数据库,总是返回Constructor failed错误。

我网站上的 PHP 版本是 7.4,它支持 PDO。但是不知道为什么连不上?

这是错误的图片:

【问题讨论】:

  • Constructor failed 听起来不像是真正的异常消息。你确定这正是它所说的吗?
  • 能否通过 MySQL Workbench 等工具连接数据库?
  • 你能提供完整和准确的错误信息吗?我看到 Constructor failed 与 Intl 包有关,但没有别的。
  • @Cid 是的,我正在使用 navicat,它工作得很好。
  • @ADyson 我用错误图片编辑了帖子。

标签: php mysql pdo remote-mysql


【解决方案1】:

只是猜测:您可能不应该使用远程 IP 地址,而应该将 localhost127.0.0.1 用于您的数据库主机。

根据pdo source code,此错误消息表示连接失败,这并没有真正的帮助,但可能表示以下情况之一(但不限于):

  • 主机名错误
  • 数据库名称错误
  • 凭据错误
  • 一些网络问题
  • 你的名字:)

我的主要怀疑是主机名,但请确保所有参数都正确。

【讨论】:

  • 不,MySQL 在另一台服务器上,我不能使用 localhost,我确实提到凭据是正确的,它在我的 localhost、Navicat 和 TEHplayground 上运行良好。
  • 没错,这就是为什么你必须看看为什么它不能在这个特定的主机上工作。显然,某些参数不同。请使用真实代码更新您的问题,当然,您的凭据除外。它们是作为 $variables 传入的吗?还是从字面上提出论点?我们看不到这一点,但您的连接字符串中一定有什么东西是关闭的。
  • 顺便问一下,你在防火墙后面吗?可能是您的服务器阻止了到其他服务器的传出流量,特别是到其他服务器的端口 3306?
  • 是的,可能就是这样。我向托管支持发送了一张票。
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多