环境:nginx已安装好, php-fpm已安装好,mysql Ver 8.0.20 ,php-mysqlnd.x86_64, PHP 7.2.11
在nginx的站点目录中创建了一个PHP测试连接mysql的代码文件:
<?php
$link = mysql_connect('127.0.0.1', '账户名', '密码');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
点击在浏览器地址栏上输入相应文件地址后可以一键访问,却出现了错误页面,去/var/log/php-fpm/www-error.log下查看出错原因,提示 PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect()
参看官方介绍:
mysql_connect 函数作用是打开一个到 MySQL 服务器的连接,自 PHP 5.5.0 起已废弃,并在自 PHP 7.0.0 开始被移除,我的PHP版本是7的,按照要求我这里替换了mysql_connect()为mysqli_connect(),但要注意的是,对应的mysql_close函数(关闭先前打开的数据库连接)也应更改,改成mysqli_close,否则出现错误Uncaught Error: Call to undefined function mysql_close()
可参考官方说明:
https://www.php.net/manual/zh/function.mysqli-connect.php
https://www.php.net/manual/zh/mysqli.close.php
这下不会错了吧,地址栏刷新,错误原封不动……还有什么问题??
继续查看日志,果真出错了,
PHP Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]
找度娘问问情况,是MySQL 8.0服务器的默认身份验证的问题,参考官方的做法:
https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
在MySQL 配置文件中(通常来说mysql配置在:/etc/my.cnf)添加以下条目,
[mysqld]
default-authentication-plugin=mysql_native_password
之后systemctl restart mysqld.service重启mysql服务,可是依然发现还会出现错误,可以参考这个博主的做法:
https://blog.csdn.net/youcijibi/article/details/81153789,需要重新授权就没有问题了:
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'password';
在Linux环境中,使用PHP 7.2.11尝试通过nginx连接MySQL 8.0.20时遇到`Uncaught Error: Call to undefined function mysql_connect()`错误。问题源于PHP 7中弃用了mysql_connect()函数。将代码中的mysql_connect()替换为mysqli_connect()并相应地更改mysql_close()为mysqli_close()后,新的错误`PHP Warning: mysqli_connect(): The server requested authentication method unknown to the client [caching_sha2_password]`出现。此错误是由于MySQL 8默认使用了新的身份验证方法。解决方法包括修改MySQL配置文件添加相关条目并重启服务,或参照其他博主的解决方案进行用户重新授权。

1129

被折叠的 条评论
为什么被折叠?



