Mysqli构造警告:服务器请求未知认证方法[caching_sha2_password](PHP7求助)
解决PHP 7连接MySQL时的
caching_sha2_password认证错误 这问题我之前帮朋友处理过,太常见了!原因很明确:MySQL 8.0及以上版本默认用caching_sha2_password作为用户认证插件,但PHP 7.x(尤其是7.4以下版本)的mysqli扩展对这个新认证方式的支持不完善,所以才会弹出那个警告。
给你几个实用的解决方案,按优先级排序:
方案一:修改MySQL用户的认证方式(最推荐)
直接把用户的认证插件换成PHP 7支持的mysql_native_password,步骤很简单:- 打开MySQL命令行工具,输入密码登录:
mysql -u root -p - 执行以下SQL语句替换认证方式(记得把
my_password换成你的实际密码):ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'my_password'; FLUSH PRIVILEGES;
如果是远程连接MySQL,把
localhost换成对应的主机地址即可。- 打开MySQL命令行工具,输入密码登录:
方案二:升级PHP版本
PHP 7.4及以上的mysqli扩展已经原生支持caching_sha2_password认证。如果你的项目环境允许升级PHP,这是一劳永逸的办法,但升级前记得备份代码和数据库,避免兼容性问题。方案三:启用SSL连接(备选)
caching_sha2_password在非SSL环境下可能无法正常工作,你可以尝试在连接时添加SSL参数:$conn = new mysqli($servername, $username, $password, $dbname, null, null, MYSQLI_CLIENT_SSL);不过这个方法需要MySQL提前配置好SSL支持,不如前两种方案直接。
最后可以给你的连接代码加个错误检查,方便快速确认是否成功:
$servername = 'localhost'; $username = 'root'; $password = 'my_password'; $dbname = 'ehotels'; $conn = new mysqli($servername, $username, $password, $dbname); // 检查连接状态 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "数据库连接成功!";
内容的提问来源于stack exchange,提问作者Celia
相关产品推荐
相关产品推荐

