一、运行环境
PHP版本为7.2.34
MySQL版本为8.0.26
二、问题
运行过程中PHP think始终无法访问到MySQL服务,且报错500响应。
PHP直接连接SQL测试:
<?php
$servername = "127.0.0.1";//数据库地址
$username = "root";//用户名
$password = "admin";//密码
$database = "data";//连接的数据库
// 创建连接
$conn = new mysqli($servername, $username, $password, $database);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "数据库连接成功";
// 执行一个简单的查询来检测连接是否成功
$sql = "SELECT 1";
$result = $conn->query($sql);
if ($result) {
echo "查询成功";
} else {
echo "查询失败: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
本地能正常访问数据库,think连接数据库不显示错误,PHP直接连接SQL调试报错
连接失败: The server requested authentication method unknown to the client
三、结论
研究发现,MySQL服务器使用了客户端不支持的认证方法。常见的原因是MySQL服务器升级到8.0版本后,默认的认证插件从
mysql_native_password
变更为caching_sha2_password
,而PHP客户端可能不支持caching_sha2_password
。
四、解决方案
1、更改MySQL用户认证插件
登录MySQL后,将root
用户的认证插件更改为mysql_native_password
,root
为数据库登录账号admin
为登录密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';
FLUSH PRIVILEGES;
重新运行PHP即可
2、更新PHP版本
标签:PHP,数据库,MySQL,password,连接,conn From: https://www.cnblogs.com/LazyArtizan/p/18635337