php连接本地mysql连接错误的问题解决方法
发布:smiling 来源: PHP粉丝网 添加日期:2025-11-15 18:53:42 浏览: 评论:0
这篇文章主要介绍了php连接本地mysql连接错误的问题解决方法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下。
我的服务器启用的nginx,配置了php的连接mysql的配置文件connect.php:
- <?php
- $server="localhost";//主机
- $db_username="root";//你的数据库用户名
- $db_password="root";//你的数据库密码
- $dbname= "users";
- $conn= newmysqli($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:
下面这两个报错分别是两个不同的问题:
一、未加载php的mysqli文件
- 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
- 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 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文件导致的,我们需要在服务器上下载:
- sudoapt-get installphp-mysqli
- sudoapt-get installphp8.1-mysqli //根据你的php版本选择msqli版本
- sudosystemctl restart php8.1-fpm //重启fpm和nginx
- sudosystemctl restart nginx
还需要确保php的配置文件php.ini中没有禁用mysqli,找到;extension=mysqli 去掉前面分号注释符,重启fpm。
二、本地数据库拒绝连接
- 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
- 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 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';
- mysql> SELECTUser, Host FROMmysql.userWHEREUser= 'root';
- +------+-----------+
- | User| Host |
- +------+-----------+
- | root | localhost |
- +------+-----------+
- 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:
- ALTERUSER'root'@'localhost'IDENTIFIED WITHmysql_native_password BY'your_password';
- FLUSH PRIVILEGES;
- mysql> SELECTuser, host, plugin FROMmysql.userWHEREuser= 'root';
- +------+-----------+-----------------------+
- | user| host | plugin |
- +------+-----------+-----------------------+
- | root | localhost | mysql_native_password |
- +------+-----------+-----------------------+
- 1 row inset(0.00 sec)
尤其是最后一步,如果不修改还是连不上的。
Tags: php连接本地mysql连接错误
- 上一篇:mysql正则匹配模糊查询某个字段
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
