執行 PHP 腳本或訪問網頁時,Apache/IIS 錯誤日誌出現:
PHP has encountered an Access Violation at 0AEAAD66
通常伴隨進程崩潰、頁面空白或 500 錯誤。
此錯誤多因 libmysql.dll 版本不匹配 引發。PHP 內建的 MySQL 驅動 (mysqlnd) 與系統路徑下的 libmysql.dll (MySQL Client Library) 版本衝突,導致記憶體存取違規。
libmysql.dll (通常在 php/ 根目錄)。C:\Windows\System32\libmysql.dll (64 位系統可能也需放入 SysWOW64)。有時 MySQL 服務異常導致連接庫狀態不一致,單純重啟 MySQL 服務即可恢復:
net stop mysql
net start mysql
# 或 services.msc 圖形介面重啟
PHP 5.3+ 內建 mysqlnd (MySQL Native Driver),不依賴外部 libmysql.dll。確認 php.ini 中:
; 確保以下擴展啟用且未載入舊版 mysql
extension=mysqli
extension=pdo_mysql
; 註解或移除舊版
; extension=php_mysql.dll
重新編譯或安裝 PHP 時選擇 --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd。
test.php:<?php $mysqli = new mysqli('localhost','user','pass','db'); echo $mysqli->host_info; ?>error.log 24 小時無 Access Violation 紀錄。C:\Windows\System32\libmysql.dll,出問題可快速回滾。"Access Violation" 多為 libmysql.dll 版本衝突所致。最快恢復法為用 PHP 目錄下的 DLL 覆蓋系統目錄;長久之計則改用內建 mysqlnd 徹底移除外部依賴。建立版本管理與變更控制流程,可有效預防此類底層崩潰。