数据库连接config.php时报错了

今天是第一次学php不太懂,写了一个config.php文件打开网页连接时报错了.php <?php $username="wanf"; $password="123456"; $host="localhost"; $dbname="www_myblog_com"; $conn=mysqli_connect($host,$username,$password,$dbname); if ($conn->connect_error){ die("连接数据库失败".$conn->connect_error); } $conn->query('set names utf8');

讨论数量: 3

应该是Mysql的加密授权mysqli不支持, 可以直接学PDO

4个月前 评论

楼主用的 MySQL8.x 吧, 顺便看一下自己 PHP 版本,如果是 PHP7.4.4 以上,应该支持 caching_sha2_password

:elephant: :elephant: :elephant: :elephant: :elephant: :elephant: :elephant: :elephant: :elephant:

1、问题&解决

原因:MySQL 认证规则

  • Mysql5.x ,认证规则 default_authentication_plugin = mysql_native_password
  • MySQL8.x , 默认认证规则改了 default_authentication_plugin = caching_sha2_password

解答:认证规则不支持接口方案

  • :one:动 MySQL 认证规则
    • 修改某个用户的认证规则为 mysql_native_password
  • :two:动 PHP 版本
    • 升级 PHP 版本,如 php7.4.33

2、MySQL

MySQL查看认证方式修改

# 查看认证规则
$  select user,host,plugin from mysql.user;
# 修改用户的认证规则 (如果非root,自行更改)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
# 刷新一下
FLUSH privileges;
# 再次确认一下
select user,host,plugin from mysql.user;

3、PHP

PHP 连接 MySQL的两种方式

虽然有两种方案,但无可厚非,要么升级 PHP 版本,要么修改 MySQL 认证规则。

  • mysqli_*()
  • pdo

mysqli_connect() 实例代码

$username = "root";
$password = "123456";
$host     = "mysql";
$dbname   = "blog";

$conn = mysqli_connect($host, $username, $password, $dbname);
if ($conn->connect_error){ 
    die("连接数据库失败".$conn->connect_error);
} 
$conn->query('set names utf8mb4');
var_dump($conn->server_info); 
var_dump($conn->client_info);
/*
string(6) "8.0.28"
string(14) "mysqlnd 7.4.33"
*/

pdo 实例代码

$host     = "mysql";   // MySQL服务器地址
$username = "root";    // MySQL用户名
$password = "123456";  // MySQL密码
$dbname   = "blog";    // 要连接的数据库名

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
4个月前 评论

感谢大家,问题已经解决.

4个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!