首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

解決 PHP 連接 MySQL 4.1.1x 版本認證協議錯誤

     編輯:MySQL 資料庫相關知識

升級至 MySQL 4.1.1x 後,PHP 使用傳統 mysql 擴展連線會報錯:1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client。本文說明原因與解決方案。

錯誤原因

  • MySQL 4.1+ 採用新式密碼認證機制(雜湊長度 41 字元)
  • PHP 內建 mysql 擴展基於 MySQL 3.23 客戶端庫,僅支援舊式認證(16 字元雜湊)
  • 設定 root 密碼後,新密碼以新格式儲存,舊客戶端無法驗證

解決方案

方案一:使用 mysqli 擴展(推薦)

PHP 5 內建 mysqli 支援新認證協議,程式碼改動較小:

$conn = mysqli_connect('localhost', 'root', 'password', 'dbname');
$result = mysqli_query($conn, $sql);

方案二:將特定用戶密碼改為舊格式

mysql> SET PASSWORD FOR 'user1'@'localhost' = OLD_PASSWORD('yourPassword');

OLD_PASSWORD() 產生 16 字元舊式雜湊,相容舊客戶端。

方案三:全域設定舊式密碼(不建議)

[mysqld]
old_passwords=1

會降低整體安全性,僅作過渡方案。

最佳實務建議

  1. 升級 PHP 程式碼至 mysqli/PDO:長期解決,獲得預處理語句、物件導向介面等現代特性
  2. 新專案直接使用 PDO:資料庫抽象層,支援多種資料庫
  3. 舊專案若無法重構:針對特定帳號使用 OLD_PASSWORD() 維持相容

根本解決在於客戶端庫升級,建議規劃遷移至 mysqli 或 PDO_MySQL,確保長期相容與安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved