目次我的服务器启用的nginx,配置了php的连接mysql的配置文件connect.php: [code]<?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)); }[/code]其中一个页面include了这个文件,按理来说可以直接连接的,当然你需要在当地mysql创建这个users库和user表。 但是调试过程中 include函数并不起作用: include('/var/www/html/phpTest/connect.php'); 我们检察nginx的错误日志 cat /var/log/nginx/error.log: 下面这两个报错分别是两个差别的问题: 一、未加载php的mysqli文件[code]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"[/code]这个是因为没有加载php的mysqli文件导致的,我们需要在服务器上下载: [code]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[/code]还需要确保php的配置文件php.ini中没有禁用mysqli,找到;extension=mysqli 去掉前面分号解释符,重启fpm。 二、当地数据库拒绝连接[code]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"[/code]需要确认 [code]root[/code] 用户是否有权限从 [code]localhost[/code] 访问数据库。执行以下 MySQL 命令来检察权限: 登录乐成后,查抄用户权限: [code]SELECT host, user FROM mysql.user;[/code]如果没有 [code]root@localhost[/code],或者 [code]root[/code] 用户没有适当的权限,你可以通过以下命令为 [code]root[/code] 赋予权限: [code]GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;[/code]确保 MySQL 配置文件 ([code]/etc/mysql/my.cnf[/code] 或 [code]/etc/mysql/mysql.conf.d/mysqld.cnf[/code]) 中允许当地连接:默认是开启的 [code]bind-address = 127.0.0.1[/code]修改完之后重启mysql即可 三、权限问题确保root用户的权限 [code]SELECT User, Host FROM mysql.user WHERE User = 'root';[/code] [code]mysql> SELECT User, Host FROM mysql.user WHERE User = 'root'; +------+-----------+ | User | Host | +------+-----------+ | root | localhost | +------+-----------+ 1 row in set (0.00 sec)[/code]然后查抄mysql认证插件:某些情况下,MySQL 可能使用了 [code]auth_socket[/code] 插件,这会阻止使用暗码登录。查抄 [code]root[/code] 是否使用 [code]auth_socket[/code] 插件: [code]SELECT user, host, plugin FROM mysql.user WHERE user = 'root';[/code]如果 [code]plugin[/code] 显示为 [code]auth_socket[/code],修改为 [code]mysql_native_password[/code]: [code]ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;[/code] [code]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)[/code]尤其是末了一步,如果不修改还是连不上的 到此这篇关于php连接当地mysql连接错误的问题解决方法的文章就先容到这了,更多相关php连接mysql连接错误内容请搜索脚本之家从前的文章或继续浏览下面的相关文章盼望大家以后多多支持脚本之家! 来源:https://www.jb51.net/program/328895yhj.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 16:41 , Processed in 0.036800 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.