【发布时间】:2020-04-15 03:15:57
【问题描述】:
我在另一个论坛上发布了这篇文章,认为它与 Ubuntu 相关,并且 MySQL 与 PHP 不兼容,但后来我意识到 mysqli 确实在加载并与之通信,因为 phpinfo() 表明 mysqli 正在运行,所以我遇到的问题似乎与 PHP 7.4 版连接数据库的方式发生了变化有关。
它显然与密码有关,因此即使不向后兼容,也必须对其进行哪些更改才能使其正常工作?我的本地开发数据库使用一个简单的密码,我不确定我需要做什么才能让它再次工作,同时仍然保持与实时服务器上旧 MySQL 5.X 的兼容性,但我的网站使用此功能进行连接。
我确实在此处和其他地方查看了 another posting 和其他几个人,并尝试了上面链接示例中提供的测试代码,但仍然无法连接。
function dbConn($DBname) {
global $DBhost;
global $DBusername;
global $DBpass;
$dbconn = new mysqli($DBhost, $DBusername, $DBpass, $DBname);
mysqli_set_charset($dbconn,"UTF8");
return $dbconn;
}
我正在运行带有 Apache2 2.4.41 和 MySQL 8.0.18 的 Ubuntu 19.10,即使启用了 mysql_native_password,它也会出现错误。
Warning: mysqli::__construct(): Unexpected server response while doing caching_sha2 auth: 109 in /var/www/html/testsite.loc/db_test.php on line 32
Warning: mysqli::__construct(): (HY000/2006): MySQL server has gone away in /var/www/html/testsite.loc/db_test.php on line 32
Warning: mysqli::query(): Couldn't fetch mysqli in /var/www/html/testsite.loc/db_test.php on line 33
Fatal error: Uncaught Error: Call to a member function fetch_row() on bool in /var/www/html/testsite.loc/db_test.php:34 Stack trace: #0 {main} thrown in /var/www/html/testsite.loc/db_test.php on line 34
【问题讨论】:
-
在 PHP5 上运行生产系统有什么好的理由吗?
-
您发布的代码在 PHP 5 和 PHP 7 中的工作方式相同。连接到 MySQL 的方式没有变化。
-
唯一不兼容的是旧的
mysql扩展,它在PHP 7 中被删除。但PDO和mysqli基本相同。 -
这段代码在 PHP 7.3 中工作,但不适用于 7.4,据我了解,这与密码有关。至于为什么 PHP 5 在生产系统上,我无法控制它,因为它是一个托管系统。显然我可以更新它,但我仍然有一个无法在 7.X 版本上运行的大型旧站点,并且重写尚未准备好上线。