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

PHP mysql vs mysqli 差異詳解:非持久 vs 持久連線、物件導向與預處理

     編輯:MySQL 資料庫相關知識

核心差異速查

特性mysql (已移除)mysqli (推薦)
PHP 版本≤ 5.6 (7.0 移除)5.0+ 內建
連線模式非持久 (每次新連線)支援持久連線 (p: 前綴)
API 風格純程序式雙重:程序式 + 物件導向
預處理語句不支援完整支援 (防注入關鍵)
多重查詢不支援multi_query()
交易控制無autocommit/commit/rollback
增強除錯無mysqli_report()

常見錯誤:Class 'mysqli' not found

原因:PHP 未啟用 mysqli 擴充

Windows

; php.ini
extension=php_mysqli.dll  ; 移除分號
; 重啟 Apache/IIS

Linux

# Ubuntu/Debian
apt-get install php-mysqli
# CentOS/RHEL
yum install php-mysqli
# 編譯安裝需加參數 --with-mysqli

mysqli 物件導向基本用法

$mysqli = new mysqli('localhost', 'user', 'pass', 'dbname');
if ($mysqli->connect_errno) {
    die('連線失敗: ' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');

// 預處理查詢 (防注入)
$stmt = $mysqli->prepare('SELECT id, name FROM users WHERE email = ?');
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // 處理資料
}
$stmt->close();

// 交易範例
$mysqli->begin_transaction();
try {
    $mysqli->query("INSERT ...");
    $mysqli->query("UPDATE ...");
    $mysqli->commit();
} catch (Exception $e) {
    $mysqli->rollback();
}
$mysqli->close();

持久連線啟用方式

$mysqli = new mysqli('p:localhost', 'user', 'pass', 'dbname');

進程結束不釋放連線,重用於後續請求,減少建立開銷。需注意 max_connections 設定與連線洩漏風險。

遷移建議

  • 舊專案務必升級至 mysqli 或 PDO
  • PDO 提供資料庫抽象層,跨資料庫遷移更容易
  • 新專案直接使用 PDO 或 mysqli OO 風格
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved