首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

解決 PHP 無法載入 MySQL 擴展:php_mysql.dll 載入失敗完整排查指南

     編輯:PHP 綜合知識

現象描述

訪問 phpMyAdmin 提示「無法載入 mysql 擴展,請檢查 PHP 配置」,phpinfo() 中無 MySQL 區塊,錯誤日誌記錄 Unable to load dynamic library 'php_mysql.dll'。此問題高發於 PHP 5.x Windows 環境(PHP 7+ 已移除 mysql 擴展,改用 mysqli/PDO_MySQL)。

根因分析

  1. DLL 依賴缺失:php_mysql.dll 依賴 libmysql.dll(MySQL 客戶端庫),後者未在系統 PATH 中。
  2. 版本不匹配:PHP 編譯版本(VC6/VC9/VC11/VC15)、線程安全(TS/Non-TS)、位數(x86/x64)與 DLL 不一致。
  3. 配置路徑錯誤:extension_dir 指向錯誤目錄,或 php.ini 未生效。
  4. IIS/FastCGI 權限:執行身份無權讀取擴展目錄或 DLL 文件。

標準解決流程(PHP 5.x + IIS 6/7 + Windows)

1. 確認 PHP 套件完整性

下載官方 Windows Zip 套件(非安裝包),解壓至 C:\php。目錄結構應包含:

C:\php\
├── php.exe
├── php.ini
├── ext\
│   ├── php_mysql.dll
│   ├── php_mysqli.dll
│   └── ...
├── libmysql.dll   <-- 關鍵文件
└── ...

2. 配置 php.ini

; 1. 擴展目錄(絕對路徑)
extension_dir = "C:\php\ext"

; 2. 啟用擴展(去掉分號)
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll

; 3. 關鍵:確保 libmysql.dll 可被找到
; 方法 A:複製到系統目錄(不推薦,易版本衝突)
; copy C:\php\libmysql.dll C:\Windows\System32\

; 方法 B:將 PHP 目錄加入系統 PATH(推薦)
; 控制面板 → 系統 → 高級 → 環境變量 → 系統變量 Path → 編輯 → 新增 C:\php

3. IIS 配置要點

  • 處理程式映射:*.php → C:\php\php-cgi.exe(FastCGI)或 php5isapi.dll(ISAPI,舊版)。
  • FastCGI 設定:PHP_FCGI_MAX_REQUESTS=10000、PHP_FCGI_CHILDREN=0。
  • 應用程式池:啟用 32 位應用程式(若 PHP 為 x86),身份設為 NetworkService 或自定義有讀取權限的用戶。

4. 重啟並驗證

iisreset /restart
# 或
net stop w3svc & net stop iisadmin & net start w3svc

瀏覽 https://localhost/phpinfo.php(內容:<?php phpinfo(); ?>),搜尋 "mysql" 確認載入成功。

進階排查技巧

  • Dependency Walker:用 depends.exe 打開 php_mysql.dll,紅色缺失項即為缺少的依賴 DLL。
  • php -m 命令行檢查模組載入狀態,錯誤輸出更直觀。
  • 檢查 php_errors.log(需在 php.ini 設定 error_log 路徑)。
  • 多 PHP 版本共存時,確認 Web 伺服器載入的是預期 php.ini(phpinfo() 顯示 "Loaded Configuration File")。

PHP 7/8 時代的遷移建議

ext/mysql 已在 PHP 7.0 移除,新專案請直接使用:

  • mysqli:面向過程/物件雙介面,支援預處理、多語句、事務。
  • PDO_MySQL:資料庫抽象層,支援 12 種資料庫,便於遷移。

舊專案遷移可參考官方 選擇 API 指南,重點替換 mysql_* 函數為 mysqli_* 或 PDO 寫法。

總結

核心關鍵在於 libmysql.dll 可被系統定位。推薦採用「PHP 目錄加入 PATH」而非複製到 System32,避免版本地獄。PHP 5.x 維護專案建議盡快規劃遷移至 mysqli/PDO,徹底規避此類擴展載入問題。

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