【发布时间】: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可以检测和解决很多问题,因此不会轻易忽略由简单错误导致的错误。毫无例外,您必须密切注意返回值,其中许多表明您必须解决或向用户报告的问题。异常允许更复杂的流控制,因为它们可以“冒泡”到代码的其他部分,以便更方便地处理它们。