php連接本地mysql連接錯(cuò)誤的問(wèn)題解決方法
我的服務(wù)器啟用的nginx,配置了php的連接mysql的配置文件connect.php:
<?php $server="localhost";//主機(jī) $db_username="root";//你的數(shù)據(jù)庫(kù)用戶名 $db_password="root";//你的數(shù)據(jù)庫(kù)密碼 $dbname = "users"; $conn = new mysqli($server,$db_username,$db_password);//鏈接數(shù)據(jù)庫(kù) if($conn->connect_error){ die("can't connect".$conn->connect_error);//如果鏈接失敗輸出錯(cuò)誤 } if (!mysqli_select_db($conn, 'users')) { die("選擇數(shù)據(jù)庫(kù)失敗: " . mysqli_error($conn)); }
其中一個(gè)頁(yè)面include了這個(gè)文件,按理來(lái)說(shuō)可以直接連接的,當(dāng)然你需要在本地mysql建立這個(gè)users庫(kù)和user表。
但是調(diào)試過(guò)程中 include函數(shù)并不起作用: include('/var/www/html/phpTest/connect.php');
我們查看nginx的錯(cuò)誤日志 cat /var/log/nginx/error.log:
下面這兩個(gè)報(bào)錯(cuò)分別是兩個(gè)不同的問(wèn)題:
一、未加載php的mysqli文件
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"
這個(gè)是因?yàn)闆](méi)有加載php的mysqli文件導(dǎo)致的,我們需要在服務(wù)器上下載:
sudo apt-get install php-mysqli sudo apt-get install php8.1-mysqli //根據(jù)你的php版本選擇msqli版本 sudo systemctl restart php8.1-fpm //重啟fpm和nginx sudo systemctl restart nginx
還需要確保php的配置文件php.ini中沒(méi)有禁用mysqli,找到;extension=mysqli 去掉前面分號(hào)注釋符,重啟fpm。
二、本地?cái)?shù)據(jù)庫(kù)拒絕連接
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"
需要確認(rèn) root
用戶是否有權(quán)限從 localhost
訪問(wèn)數(shù)據(jù)庫(kù)。執(zhí)行以下 MySQL 命令來(lái)查看權(quán)限:
登錄成功后,檢查用戶權(quán)限:
SELECT host, user FROM mysql.user;
如果沒(méi)有 root@localhost
,或者 root
用戶沒(méi)有適當(dāng)?shù)臋?quán)限,你可以通過(guò)以下命令為 root
賦予權(quán)限:
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
) 中允許本地連接:默認(rèn)是開(kāi)啟的
bind-address = 127.0.0.1
修改完之后重啟mysql即可
三、權(quán)限問(wèn)題
確保root用戶的權(quán)限
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認(rèn)證插件:某些情況下,MySQL 可能使用了 auth_socket
插件,這會(huì)阻止使用密碼登錄。檢查 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)
尤其是最后一步,如果不修改還是連不上的
到此這篇關(guān)于php連接本地mysql連接錯(cuò)誤的問(wèn)題解決方法的文章就介紹到這了,更多相關(guān)php連接mysql連接錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Navicat連接MySQL出現(xiàn)2059錯(cuò)誤的解決方案
- IDEA的database插件無(wú)法連接mysql的解決辦法(08001錯(cuò)誤)
- SQLyog連接MySQL8.0+報(bào)錯(cuò):錯(cuò)誤碼2058的解決方案
- SQLyog連接MySQL8.0+報(bào)錯(cuò):錯(cuò)誤號(hào)碼2058的解決方案
- DBeaver連接mysql數(shù)據(jù)庫(kù)錯(cuò)誤圖文解決方案
- Navicat連接MySQL提示1045錯(cuò)誤解決(重置MySQL密碼)
- MySQL連接異常報(bào)10061錯(cuò)誤問(wèn)題解決
- 連接mysql錯(cuò)誤問(wèn)題解決方案
相關(guān)文章
Uncaught exception com_exception with message Failed to crea
Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `InternetExplorer.Application': 拒絕訪問(wèn)2012-01-01盤(pán)點(diǎn)PHP和ASP.NET的10大對(duì)比!
本文主要針對(duì)開(kāi)源 PHP 和非開(kāi)源的 ASP.NET 在性能、成本、可擴(kuò)展性,技術(shù)支持和復(fù)雜性等方面進(jìn)行比較,感興趣的小伙伴們可以參考一下2015-12-12PHP創(chuàng)建對(duì)象的六種方式實(shí)例總結(jié)
這篇文章主要介紹了PHP創(chuàng)建對(duì)象的六種方式,結(jié)合實(shí)例形式總結(jié)分析了php類的定義及對(duì)象實(shí)例化常見(jiàn)操作技巧,需要的朋友可以參考下2019-06-06PHP實(shí)現(xiàn)的封裝驗(yàn)證碼類詳解
本篇文章是對(duì)PHP實(shí)現(xiàn)的封裝驗(yàn)證碼類進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP簡(jiǎn)單實(shí)現(xiàn)循環(huán)鏈表功能示例
這篇文章主要介紹了PHP簡(jiǎn)單實(shí)現(xiàn)循環(huán)鏈表功能,簡(jiǎn)單描述了循環(huán)鏈表的概念、功能并結(jié)合實(shí)例形式分析了php定義及使用循環(huán)鏈表的相關(guān)操作技巧,需要的朋友可以參考下2017-11-11ajax+php打造進(jìn)度條 readyState各狀態(tài)
php 打造進(jìn)度條 readyState各狀態(tài),需要的朋友可以參考下。2010-03-03php 實(shí)現(xiàn)進(jìn)制相互轉(zhuǎn)換
最近的項(xiàng)目中需要用到進(jìn)制轉(zhuǎn)換,這個(gè)問(wèn)題在剛剛接觸計(jì)算機(jī)理論時(shí)候,還是很會(huì)的,好久不用,居然模糊了……2016-04-04