在 Linux 環境部署 Discuz 等 PHP 應用時,常遇到 mysql_connect() 不支援,請檢查 mysql 模組是否正確加載 錯誤。本文提供基於 CentOS 5.4 環境的完整排查與修復方案,核心在於安裝缺失的 php-mysql 與 php-pdo 擴展模組。
應用啟動報錯:mysql_connect() 不支援請檢查mysql模塊是否正確加載
檢查 PHP 模組目錄 /usr/lib/php/modules/(64 位系統為 /usr/lib64/php/modules/),發現缺少關鍵的 mysql.so、mysqli.so、pdo_mysql.so 等擴展檔案。
從 CentOS 5.4 安裝光碟或官方鏡像站下載對應版本:
php-mysql-5.1.6-20.el5.i386.rpmphp-pdo-5.1.6-20.el5.i386.rpm上傳至伺服器(如 /tmp 目錄)。
rpm -ivh php-mysql-5.1.6-20.el5.i386.rpm --nodeps
rpm -ivh php-pdo-5.1.6-20.el5.i386.rpm --nodeps
注意:--nodeps 參數跳過依賴檢查,若系統缺少底層庫可能導致運行時錯誤,建議優先使用 yum install php-mysql php-pdo 自動解決依賴。
ls /usr/lib/php/modules/ | grep -E 'mysql|pdo'
# 預期輸出包含:
# mysql.so mysqli.so pdo_mysql.so pdo.so pdo_sqlite.so
vi /etc/php.ini
# 找到 extension=msql.so 行,在其下方添加(去掉分號註釋):
extension=mysql.so
extension=mysqli.so
extension=pdo_mysql.so
/etc/init.d/httpd restart
# 或 systemctl restart httpd (CentOS 7+)
重新整理網頁,MySQL 連線應恢復正常。可建立測試腳本確認:
<?php
$link = mysql_connect('localhost', 'root', 'password');
if ($link) {
echo 'MySQL 連線成功!';
mysql_close($link);
} else {
echo '連線失敗:' . mysql_error();
}
?>
重要提醒:mysql_connect() 自 PHP 5.5.0 起棄用,PHP 7.0 完全移除。新專案請使用:
new PDO('mysql:host=localhost;dbname=test', 'user', 'pass')new mysqli('localhost', 'user', 'pass', 'dbname')兩者均支援預處理語句、事務控制、物件導向介面,安全性與效能遠優於舊版 mysql 擴展。
/usr/lib64/php/modules//var/log/audit/audit.log,可能需 setsebool -P httpd_can_network_connect_db 1