首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP mysqli 擴展入門:面向對象數據庫操作全攻略

     編輯:PHP 相關知識

為什麼選擇 mysqli?

mysqli(MySQL Improved)是 PHP 5 引入的改進版擴展,相比舊 mysql 擴展具有顯著優勢:

  • 面向對象 API:代碼結構更清晰,支持鏈式調用。
  • 預處理語句:有效防止 SQL 注入,提升重複查詢性能。
  • 事務支持:支援 commit()/rollback() 保證數據一致性。
  • 多查詢執行:multi_query() 可批量執行 SQL。
  • 增強的調試能力:提供 debug()、dump_debug_info() 等方法。

環境配置

  1. 編輯 php.ini,確保 extension=php_mysqli.dll 前無分號。
  2. 重啟 Web 服務(Apache/Nginx + PHP-FPM)。
  3. 通過 phpinfo() 驗證 mysqli 區塊是否存在。

核心操作示例

1. 建立連接

<?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());
}
?>

2. 執行查詢並遍歷結果

$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();

3. 預處理語句(防注入必備)

$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();

4. 事務控制

$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")設置字符集

最佳實踐建議

  • 優先使用面向對象風格,代碼更易維護。
  • 所有用戶輸入參數必須使用預處理綁定,絕不直接拼接 SQL。
  • 查詢結束後及時調用 $result->free() 釋放內存。
  • 長連接場景下定期調用 $mysqli->ping() 檢測連接存活。
  • 生產環境關閉錯誤顯示,改為記錄日誌:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved