当前位置:首页 > Mysql教程 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2025-11-15 18:53:42 浏览: 评论:0 

这篇文章主要介绍了php连接本地mysql连接错误的问题解决方法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下。

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

  1. <?php 
  2.  
  3. $server="localhost";//主机 
  4.  
  5. $db_username="root";//你的数据库用户名 
  6.  
  7. $db_password="root";//你的数据库密码 
  8.  
  9. $dbname"users"
  10.  
  11. $conn= newmysqli($server,$db_username,$db_password);//链接数据库 
  12.  
  13. if($conn->connect_error){ 
  14.  
  15. die("can't connect".$conn->connect_error);//如果链接失败输出错误 
  16.  
  17.  
  18. if(!mysqli_select_db($conn'users')) { 
  19.  
  20. die("选择数据库失败: ". mysqli_error($conn)); 
  21.  

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

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

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

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

一、未加载php的mysqli文件

  1. ​2024/10/16 15:58:08 [error] 370320#370320: *18 FastCGI sent instderr: "PHP message: PHP Fatal error:  Uncaught Error: Class "mysqli" not found in /var/www/html/phpTest/connect.php:7 
  2.  
  3.  
  4. Stack trace: 
  5.  
  6. #0 /var/www/html/phpTest/signup.php(32): include() 
  7.  
  8. #1 {main} 
  9.  
  10. thrown in /var/www/html/phpTest/connect.php on line 7"while reading response header fromupstream, 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" 

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

  1. sudoapt-get installphp-mysqli 
  2.  
  3. sudoapt-get installphp8.1-mysqli //根据你的php版本选择msqli版本 
  4.  
  5. sudosystemctl restart php8.1-fpm  //重启fpm和nginx 
  6.  
  7. sudosystemctl restart nginx 

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

二、本地数据库拒绝连接

  1. 2024/10/16 16:27:26 [error] 371624#371624: *10 FastCGI sent instderr: "PHP message: PHP Fatal error:  Uncaught mysqli_sql_exception: Access denied for user 'root'@'localhost' in /var/www/html/phpTest/connect.php:7 
  2.  
  3. Stack trace: 
  4.  
  5. #0 /var/www/html/phpTest/connect.php(7): mysqli->__construct() 
  6.  
  7. #1 /var/www/html/phpTest/signup.php(32): include('...') 
  8.  
  9. #2 {main} 
  10.  
  11. thrown in /var/www/html/phpTest/connect.php on line 7"while reading response header fromupstream, 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 命令来查看权限:

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

SELECThost, userFROMmysql.user;

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

GRANTALLPRIVILEGESON*.* 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用户的权限

SELECTUser, Host FROMmysql.userWHEREUser= 'root';

  1. mysql> SELECTUser, Host FROMmysql.userWHEREUser'root'
  2.  
  3. +------+-----------+ 
  4.  
  5. | User| Host      | 
  6.  
  7. +------+-----------+ 
  8.  
  9. | root | localhost | 
  10.  
  11. +------+-----------+ 
  12.  
  13. 1 row inset(0.00 sec) 

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

SELECTuser, host, plugin FROMmysql.userWHEREuser= 'root';

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

  1. ALTERUSER'root'@'localhost'IDENTIFIED WITHmysql_native_password BY'your_password'
  2.  
  3. FLUSH PRIVILEGES
  1. mysql> SELECTuser, host, plugin FROMmysql.userWHEREuser= 'root'
  2.  
  3. +------+-----------+-----------------------+ 
  4.  
  5. user| host      | plugin                | 
  6.  
  7. +------+-----------+-----------------------+ 
  8.  
  9. | root | localhost | mysql_native_password | 
  10.  
  11. +------+-----------+-----------------------+ 
  12.  
  13. 1 row inset(0.00 sec) 

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


Tags: php连接本地mysql连接错误

分享到: