| 特性 | mysql (已移除) | mysqli (推薦) |
|---|---|---|
| PHP 版本 | ≤ 5.6 (7.0 移除) | 5.0+ 內建 |
| 連線模式 | 非持久 (每次新連線) | 支援持久連線 (p: 前綴) |
| API 風格 | 純程序式 | 雙重:程序式 + 物件導向 |
| 預處理語句 | 不支援 | 完整支援 (防注入關鍵) |
| 多重查詢 | 不支援 | multi_query() |
| 交易控制 | 無 | autocommit/commit/rollback |
| 增強除錯 | 無 | mysqli_report() |
原因:PHP 未啟用 mysqli 擴充
; php.ini
extension=php_mysqli.dll ; 移除分號
; 重啟 Apache/IIS
# Ubuntu/Debian
apt-get install php-mysqli
# CentOS/RHEL
yum install php-mysqli
# 編譯安裝需加參數 --with-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 設定與連線洩漏風險。