Linux上php连接mysql,引发Uncaught Error: Call to undefined function mysql_connect()等问题

在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配置文件添加相关条目并重启服务,或参照其他博主的解决方案进行用户重新授权。

环境: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';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值