在 PHP 開發中,資料庫連接方式的選擇直接影響應用程式的效能與安全性。早期的 mysql 擴展採用非持久連接模式,每次執行查詢都會建立新的連接進程,頻繁的連線建立與關閉會帶來顯著的伺服器開銷。而 mysqli(MySQL Improved)引入了持久連接機制,同一腳本執行期間多次呼叫將復用同一連接進程,大幅降低資源消耗。
| 特性 | mysql 擴展 | mysqli 擴展 |
|---|---|---|
| 連接模式 | 非持久連接 | 支援持久連接 |
| 物件導向介面 | 不支援 | 完整支援 |
| 預處理語句 | 不支援 | 支援(防 SQL 注入) |
| 多重查詢 | 不支援 | 支援 |
| 事務控制 | 不支援 | 支援 |
| PHP 版本支援 | PHP 5.5.0 棄用,7.0.0 移除 | PHP 5.0+ 持續維護 |
許多開發者在使用 new mysqli('localhost', 'username', 'password', 'dbname') 時遇到 Fatal error: Class 'mysqli' not found 錯誤。這是因為 mysqli 擴展雖然內建於 PHP,但預設並未啟用,需手動開啟:
php.ini 設定檔;extension=php_mysqli.dll; 取消註解編譯安裝 PHP 時需加入 --with-mysqli 參數,或使用套件管理器安裝:
# Ubuntu/Debian
sudo apt-get install php-mysqli
# CentOS/RHEL
sudo yum install php-mysqli
mysql 擴展已被移除,不再獲得安全性更新mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 開啟例外錯誤報告遷移舊專案時,可參考 PHP 官方文件的 遷移指南,逐步替換 mysql_* 函數為對應的 mysqli_* 版本或物件導向寫法。