首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP7.4和MySQL连接

问PHP7.4和MySQL连接
EN

Stack Overflow用户
提问于 2019-12-23 22:40:24
回答 2查看 17.7K关注 0票数 2

我在另一个论坛上发布了这篇文章,认为这是与Ubuntu相关的,而MySQL并没有很好地与PHP打交道,但后来我意识到mysqli确实在加载并与其通信,因为phpinfo()显示mysqli正在运行,所以我遇到的问题似乎与PHP7.4中连接到数据库的方式的变化有关。

它显然与密码有关,所以即使不向后兼容,也必须对密码进行哪些更改才能工作?我的本地开发数据库使用一个简单的密码,我不知道我需要做什么才能让它再次工作,同时仍然保持与活动服务器上的旧的MySQL 5.X的兼容性,但是我的站点使用这个函数连接。

我确实在这里和其他地方回顾了另一篇帖子和其他几个关于它的内容,并尝试了上面链接的示例中提供的测试代码,但是仍然无法连接。

代码语言:javascript
复制
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运行Ubuntu19.10,即使启用了mysql_native_password,也会产生错误。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-24 01:25:06

解决方案是简单地将数据库密码更改为它可以通过登录到终端中的mysql来使用的内容:

代码语言:javascript
复制
sudo mysql -p -u root

然后在mysql>提示符下运行其中的每一个:

代码语言:javascript
复制
ALTER USER 'USERNAME'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YOUR_PASSWORD';

FLUSH PRIVILEGES;

由于我的代码没有改变,并且仍然使用相同的密码,所以它应该在本地PHP 7.4和Live5.X上都能工作。不过,我不知道如何在活动服务器上这样做,因为我没有访问mysql表的权限。

票数 0
EN

Stack Overflow用户

发布于 2019-12-23 22:48:12

根本的问题是有一个不受支持的身份验证插件分配给用户,这会导致密码不匹配。您可以以不同的方式配置您的开发MySQL服务器,以便建立类似的环境。为了做到这一点,您必须编辑/etc/mysql/my.cnf

代码语言:javascript
复制
[mysqld]
...
default-authentication-plugin = mysql_native_password

但是,我建议将生产环境升级到PHP7.4和MySQL 8.0,以便使用caching_sha2_password,这是自PHP8.0以来默认的身份验证插件。您还可以在部署期间通过MySQL CLI更新密码--但运行相同的配置是最不麻烦的,也是最可靠的测试方法。

升级到MySQL 8.0 :默认身份验证插件注意事项对此作了详细解释。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59461990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档