解决php连接本地mysql连接错误的问题

devtools/2024/10/23 15:44:49/

我的服务器启用的nginx,配置了php的连接mysql的配置文件connect.php

php"><?php$server="localhost";//主机$db_username="root";//你的数据库用户名$db_password="root";//你的数据库密码$dbname = "users";$conn = new mysqli($server,$db_username,$db_password);//链接数据库if($conn->connect_error){die("can't connect".$conn->connect_error);//如果链接失败输出错误}if (!mysqli_select_db($conn, 'users')) {die("选择数据库失败: " . mysqli_error($conn));}

其中一个页面include了这个文件,按理来说可以直接连接的,当然你需要在本地mysql建立这个users库和user表。

但是调试过程中 include函数并不起作用:    include('/var/www/html/phpTest/connect.php');

我们查看nginx的错误日志 cat /var/log/nginx/error.log:

下面这两个报错分别是两个不同的问题:

一、未加载phpmysqli文件
2024/10/16 15:58:08 [error] 370320#370320: *18 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Error: Class "mysqli" not found in /var/www/html/phpTest/connect.php:7
Stack trace:
#0 /var/www/html/phpTest/signup.php(32): include()
#1 {main}thrown in /var/www/html/phpTest/connect.php on line 7" while reading response header from upstream, client: 113.132.177.30, server: _, request: "POST /phpTest/signup.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.1-fpm.sock:", host: "116.205.127.142", referrer: "http://116.205.127.142/phpTest/signup.php"

这个是因为没有加载phpmysqli文件导致的,我们需要在服务器上下载:

sudo apt-get install php-mysqli
sudo apt-get install php8.1-mysqli //根据你的php版本选择msqli版本sudo systemctl restart php8.1-fpm  //重启fpm和nginx
sudo systemctl restart nginx

还需要确保php的配置文件php.ini中没有禁用mysqli,找到;extension=mysqli 去掉前面分号注释符,重启fpm。

二、本地数据库拒绝连接
2024/10/16 16:27:26 [error] 371624#371624: *10 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught mysqli_sql_exception: Access denied for user 'root'@'localhost' in /var/www/html/phpTest/connect.php:7
Stack trace:
#0 /var/www/html/phpTest/connect.php(7): mysqli->__construct()
#1 /var/www/html/phpTest/signup.php(32): include('...')
#2 {main}thrown in /var/www/html/phpTest/connect.php on line 7" while reading response header from upstream, client: 113.132.177.30, server: _, request: "POST /phpTest/signup.php HTTP/1.1", upstream: "fastcgi://unix:/run/php/php8.1-fpm.sock:", host: "116.205.127.142", referrer: "http://116.205.127.142/phpTest/signup.php"

需要确认 root 用户是否有权限从 localhost 访问数据库。执行以下 MySQL 命令来查看权限:

登录成功后,检查用户权限:

SELECT host, user FROM mysql.user;

如果没有 root@localhost,或者 root 用户没有适当的权限,你可以通过以下命令为 root 赋予权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

    确保 MySQL 配置文件 (/etc/mysql/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf) 中允许本地连接:默认是开启的

bind-address = 127.0.0.1

修改完之后重启mysql即可

三、权限问题

确保root用户的权限

SELECT User, Host FROM mysql.user WHERE User = 'root';
mysql> SELECT User, Host FROM mysql.user WHERE User = 'root';
+------+-----------+
| User | Host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set (0.00 sec)

然后检查mysql认证插件:某些情况下,MySQL 可能使用了 auth_socket 插件,这会阻止使用密码登录。检查 root 是否使用 auth_socket 插件:

SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

如果 plugin 显示为 auth_socket,修改为 mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
+------+-----------+-----------------------+
| user | host      | plugin                |
+------+-----------+-----------------------+
| root | localhost | mysql_native_password |
+------+-----------+-----------------------+
1 row in set (0.00 sec)

尤其是最后一步,如果不修改还是连不上的


http://www.ppmy.cn/devtools/128184.html

相关文章

海南华志亿星电子商务有限公司正规吗可靠吗?

在数字经济的浪潮中&#xff0c;抖音电商以其独特的短视频直播模式&#xff0c;成为了众多企业转型升级的新蓝海。而在这片充满机遇与挑战的海域里&#xff0c;海南华志亿星电子商务有限公司如同一颗冉冉升起的新星&#xff0c;以其专业的电商服务和敏锐的市场洞察力&#xff0…

无线网卡知识的学习-- mac80211主要代码流程

一 简介概要: mac80211驱动程序作为Linux内核中管理和控制无线网络接口的核心模块,其主要流程涵盖了从数据帧接收到发送的完整过程。 主要覆盖了7个方面: 1. 数据帧接收流程,2. 数据帧发送流程 3. 频道管理和切换 4. 接口管理 5. 安全和认证 6. 管理和调试 7. 注册和初…

Java.6--多态-设计模式-抽象父类-抽象方法

一、多态 1.定义--什么是多态&#xff1f; a.同一个父类的不同子类对象&#xff0c;在做同一行为的时候&#xff0c;有不同的表现形式&#xff0c;这就是多态。&#xff08;总结为&#xff1a;一个父类下的不同子类&#xff0c;同一行为&#xff0c;不同表现形式。&#xff0…

Python迭代器和生成器:迭代器协议①

文章目录 1. 什么是迭代器2. 迭代器协议2.1 __iter__() 方法2.2 __next__() 方法2.3 示例代码2.4 迭代器的优点 3. 创建自定义迭代器示例代码 4. 迭代器的高级用法4.1 无限序列4.2 示例代码4.3 文件迭代器4.4 示例代码 5. 综合详细例子5.1 示例代码student.pystudent_iterator.…

基于SpringBoot+Vue智慧养老关爱系统【提供源码+答辩PPT+参考文档+项目部署】

&#x1f4a5; 这两年毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的JavaWeb项目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff01; ❗如何解决这类问题&#xff1f; 让我们能够顺利通过毕业&#xff0c;我也一直在不断思考、努力、精进。通过2024年…

vue+element的confirm提示消息文字变色和换行

效果: 思路: 可以考虑采用模板字符串的思路实现 代码: this.confirm(您确定要<b style"Color: red">${text}</b>的数据项&#xff1f;<br/>单位名称: ${row.companyName} <br/>属性: ${row.attributeName}).then(() > {console.log(确定…

探索Web3生态系统:社区、协议与参与者的角色

Web3代表着互联网的下一个演变阶段&#xff0c;旨在通过去中心化技术赋予用户更大的控制权和参与感。在这个新兴生态系统中&#xff0c;社区、协议和参与者扮演着不可或缺的角色&#xff0c;共同推动着Web3的建设与发展。 社区的核心作用 在Web3中&#xff0c;社区通过提供反馈…

stm32 usart用不同的串口调式接口

1&#xff0c;usart有可使用的三个usart,(uart1/usart2/uart3)&#xff0c;我这里使用usart3来举例说明&#xff1a; RS232/串口模块选择接口 这是开发板板载的一个 RS232&#xff08;COM3&#xff09; /ATK 模块接口&#xff08;U17&#xff09;选择接口&#xff08;P2&#…