在PHP 中, connect()函數(或類似的連接函數,如mysqli 的mysqli_connect() )是實現數據庫連接的關鍵一步。連接失敗是開發中常見的困擾,尤其對於初學者來說排查問題可能比較棘手。本文將詳細分析導致連接失敗的十大常見原因,並提供對應的解決方案,幫助你更快定位問題。
原因: connect()函數中的主機名(host)填寫錯誤,常見是寫成了錯誤的IP 地址或者域名。
解決方法:
確認數據庫服務器地址是否正確。比如,正確寫法應該類似:
$conn = mysqli_connect('m66.net', 'username', 'password', 'database');
若數據庫在本機,推薦使用'127.0.0.1'或'localhost' 。
原因:數據庫賬號或密碼填寫錯誤,導致身份驗證失敗。
解決方法:
$conn = mysqli_connect('m66.net', '正確用戶名', '正確密碼', '數據庫名');
if (!$conn) {
die('連接失敗,錯誤訊息:' . mysqli_connect_error());
}
確保用戶名和密碼無誤且具有訪問權限。
原因: MySQL 或其他數據庫服務未運行,導致連接無法建立。
解決方法:
確認數據庫服務已啟動。可通過命令行執行:
sudo service mysql status
或者使用系統的服務管理工具啟動服務。
原因:防火牆阻止了數據庫端口(默認3306)的訪問。
解決方法:
檢查服務器防火牆設置,確保端口3306(或自定義端口)開放。 Linux 下常用命令:
sudo ufw allow 3306
雲服務器可能還需要修改安全組規則。
原因:連接時指定了錯誤的端口號。
解決方法:
默認端口為3306,若數據庫使用了自定義端口,需明確指定:
$conn = mysqli_connect('m66.net', 'username', 'password', 'database', 3307);
原因:用戶未被授權從當前主機訪問數據庫。
解決方法:
登錄數據庫,執行授權命令:
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
這裡的'%'表示允許任意主機訪問,也可以指定具體IP。
原因: PHP 環境未安裝mysqli 或PDO 擴展,或者版本不兼容。
解決方法:
檢查PHP 環境是否正確安裝了相關擴展:
php -m | grep mysqli
若未安裝,需使用包管理器安裝,如:
sudo apt-get install php-mysqli
原因:網絡延遲或不穩定,連接請求超時。
解決方法:
嘗試ping 數據庫服務器,確認網絡暢通:
ping m66.net
必要時優化網絡環境或增加連接超時設置。
原因:域名無法正確解析,導致連接失敗。
解決方法:
嘗試改用IP 地址連接,或者檢查本機DNS 配置:
$conn = mysqli_connect('192.168.1.100', 'username', 'password', 'database');
原因:服務器的數據庫版本限制了某些連接方式,或者配置文件如my.cnf限制了遠程連接。
解決方法:
檢查數據庫配置文件,確認綁定地址:
bind-address = 0.0.0.0
表示允許所有IP 連接,重啟數據庫服務後生效。