【问题标题】:Error when connecting to external db - mysqli_connect(): (HY000/2002): Connection timed out连接到外部数据库时出错 - mysqli_connect(): (HY000/2002): Connection timed out
【发布时间】:2020-07-24 22:04:04
【问题描述】:

我将数据库移至外部服务器,因为我的虚拟主机提供商提供的服务器太有限(无法远程访问)。所以我在 Vultr 服务器(CentOS 7)上设置了一个 MariaDB。在 phpmyadmin 中一切正常,我已经导入了另一个数据库。 尝试从我的网站连接时,我收到以下警告:

Warning: mysqli_connect(): (HY000/2002): Connection timed out in blabla/assets/php/config.php on line 8 ERROR: Could not connect. Connection timed out

PHP 代码

define('DB_SERVER', '11.22.33.44');
define('DB_USERNAME', 'user');
define('DB_PASSWORD', 'pw');
define('DB_NAME', 'data');

$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

它在旧数据库上运行得非常好,所以我认为我错过了一些东西,但我无法弄清楚。 我尝试打开3306端口,尝试不同的用户,允许所有IP但没有任何效果。

【问题讨论】:

  • 确保从您拥有应该连接到数据库 11.22.33.44 os firdt 的 php 脚本的服务器能够访问该服务器,如果是,请尝试使用命令行远程连接“mysql - uUser -pPass -h 11.22.33.44" 可能只是 mariadb 配置错误
  • 注意:object-oriented interface to mysqli 明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆,因为缺少单个i 会导致麻烦。示例:$db = new mysqli(…)$db->prepare("…") 过程接口是 PHP 4 时代的产物,不应在新代码中使用。此外,程序界面的错误检查和报告不那么严格,使调试工作受挫。
  • 请尝试改掉用=== false 之类的不必要的东西弄乱代码的习惯。许多函数被设计为返回逻辑真或假的值,因此这是多余的,并且在某些情况下可能会导致错误,因为您可能会得到逻辑上的真值,但不是真正的true
  • 提示:enabling exceptions in mysqli 可以检测和解决很多问题,因此不会轻易忽略由简单错误导致的错误。毫无例外,您必须密切注意返回值,其中许多表明您必须解决或向用户报告的问题。异常允许更复杂的流控制,因为它们可以“冒泡”到代码的其他部分,以便更方便地处理它们。

标签: php mysql mysqli mariadb


【解决方案1】:

感谢所有试图提供帮助的人,但遗憾的是问题不在我这边。 原来,one.com 也不允许与自己的数据库以外的其他数据库进行传出连接。

【讨论】:

    猜你喜欢
    • 2017-07-08
    • 2016-08-04
    • 2019-10-23
    • 2017-06-22
    • 2018-03-05
    • 1970-01-01
    • 2022-11-17
    • 2015-03-10
    相关资源
    最近更新 更多