當前位置: 首頁> 最新文章列表> 如何使用mysqli::stmt_init 函數準備和執行一個SQL 預處理語句?

如何使用mysqli::stmt_init 函數準備和執行一個SQL 預處理語句?

M66 2025-06-26

在PHP 中,使用MySQLi 擴展可以幫助我們連接數據庫並執行查詢。為了提高安全性並防止SQL 注入,MySQLi 提供了預處理語句(Prepared Statements)。在本文中,我們將介紹如何使用mysqli::stmt_init函數來準備和執行一個SQL 預處理語句。

什麼是預處理語句?

預處理語句是數據庫交互的一種方法,它能夠將SQL 語句與數據分離,首先發送SQL 查詢的模板到數據庫,然後將參數綁定到查詢中。這樣做可以防止SQL 注入攻擊,提升安全性。

mysqli::stmt_init 函數簡介

mysqli::stmt_init是MySQLi 類中的一個方法,用於初始化一個新的預處理語句。它返回一個mysqli_stmt對象,可以用來綁定參數並執行SQL 查詢。

準備和執行SQL 預處理語句的步驟

以下是使用mysqli::stmt_init函數準備和執行SQL 預處理語句的步驟:

1. 創建數據庫連接

首先,我們需要連接到MySQL 數據庫。可以使用mysqli類來創建一個數據庫連接。

 <?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);

// 檢查連接
if ($conn->connect_error) {
    die("連接失敗: " . $conn->connect_error);
}
?>

2. 初始化預處理語句

使用mysqli::stmt_init函數初始化一個新的預處理語句對象。這個對象將用於綁定參數和執行SQL 查詢。

 <?php
// 初始化預處理語句
$stmt = $conn->stmt_init();

// 檢查是否成功初始化
if (!$stmt) {
    die("預處理語句初始化失敗: " . $conn->error);
}
?>

3. 準備SQL 查詢

使用prepare方法來準備SQL 查詢語句。假設我們要執行一個簡單的SELECT 查詢,並從數據庫中獲取用戶信息。

 <?php
$sql = "SELECT * FROM users WHERE email = ?";
$stmt->prepare($sql);
?>

4. 綁定參數

使用bind_param方法將變量綁定到SQL 查詢中的佔位符( ? )。在此示例中,我們將綁定一個字符串類型的參數(用戶的電子郵件)。

 <?php
$email = "user@example.com";
$stmt->bind_param("s", $email); // "s" 表示字符串類型
?>

5. 執行查詢

使用execute方法執行SQL 查詢。

 <?php
$stmt->execute();
?>

6. 獲取查詢結果

查詢成功執行後,可以使用get_result方法獲取結果集,返回一個mysqli_result對象。

 <?php
$result = $stmt->get_result();

// 獲取結果並顯示
while ($row = $result->fetch_assoc()) {
    echo "ID: " . $row['id'] . " - Name: " . $row['name'] . "<br>";
}
?>

7. 關閉語句和連接

查詢完成後,記得關閉預處理語句和數據庫連接。

 <?php
$stmt->close();
$conn->close();
?>

總結

通過以上步驟,我們就可以使用mysqli::stmt_init函數成功地準備和執行一個SQL 預處理語句。預處理語句不僅提高了代碼的安全性,防止了SQL 注入攻擊,還能提高數據庫查詢的效率,特別是在多次執行相同的查詢時。

 $url = "https://api.m66.net/data"; // 將域名替換為 m66.net