mysqli(MySQL Improved)是 PHP 5 引入的改進版擴展,相比舊 mysql 擴展具有顯著優勢:
commit()/rollback() 保證數據一致性。multi_query() 可批量執行 SQL。debug()、dump_debug_info() 等方法。php.ini,確保 extension=php_mysqli.dll 前無分號。phpinfo() 驗證 mysqli 區塊是否存在。<?php
// 面向對象風格(推薦)
$mysqli = new mysqli("localhost", "root", "root", "sunyang");
if ($mysqli->connect_errno) {
die("連接失敗: " . $mysqli->connect_error);
}
$mysqli->set_charset("utf8mb4"); // 設置字符集
// 過程化風格
$link = mysqli_connect("localhost", "root", "root", "sunyang");
if (!$link) {
die("連接失敗: " . mysqli_connect_error());
}
?>
$query = "SELECT * FROM employee";
$result = $mysqli->query($query);
if ($result) {
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) { // 關聯數組
echo $row[0] . "<br>";
echo $row[1] . "<br>";
echo $row[2] . "<br>";
echo $row[3] . "<br>";
echo "<hr>";
}
}
$result->free(); // 釋放結果集
} else {
echo "查詢失敗: " . $mysqli->error;
}
$mysqli->close();
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
$username = "test_user";
$email = "test@example.com";
$stmt->execute();
echo "新用戶 ID: " . $stmt->insert_id;
$stmt->close();
$mysqli->begin_transaction();
try {
$mysqli->query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$mysqli->commit();
} catch (Exception $e) {
$mysqli->rollback();
throw $e;
}
| 屬性/方法 | 說明 |
|---|---|
$mysqli->insert_id | 上一步 INSERT 產生的自增 ID |
$mysqli->affected_rows | 上一操作影響的行數 |
$mysqli->errno / $mysqli->error | 最近錯誤代碼/信息 |
$mysqli->query($sql) | 執行單條查詢 |
$mysqli->prepare($sql) | 預處理語句 |
$mysqli->multi_query($sql) | 批量執行多條 SQL |
$mysqli->begin_transaction() | 開啟事務 |
$mysqli->commit() / rollback() | 提交/回滾事務 |
$mysqli->set_charset("utf8mb4") | 設置字符集 |
$result->free() 釋放內存。$mysqli->ping() 檢測連接存活。mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);