當前位置: 首頁> 最新文章列表> 如何使用mysqli::stmt_init 實現高效的關鍵字模糊搜索(LIKE 查詢)

如何使用mysqli::stmt_init 實現高效的關鍵字模糊搜索(LIKE 查詢)

M66 2025-06-23

在開發PHP 應用程序時,數據庫查詢是最常見的操作之一。尤其是在處理大數據量時,如何提高查詢效率是我們關注的重點。在PHP 中,使用mysqli擴展來執行數據庫查詢是非常普遍的,而mysqli::stmt_init是一個很好的工具,它可以幫助我們執行預處理語句,提高查詢效率和安全性。

本篇文章將介紹如何通過mysqli::stmt_init來實現高效的關鍵字模糊搜索,特別是如何使用SQL 中的LIKE關鍵字進行查詢。

1. 預處理語句與mysqli::stmt_init

在PHP 中, mysqli提供了mysqli::stmt_init方法來初始化一個預處理語句。這意味著SQL 查詢將預先編譯,然後通過綁定參數來執行,避免了SQL 注入的風險。預處理語句不僅提供了安全性,還能在執行相同查詢時提供更好的性能。

文法

$stmt = $mysqli->stmt_init();

2. 為什麼使用LIKE進行模糊查詢

LIKE關鍵字常用於SQL 中實現模糊查詢。它通常用於查找匹配某些模式的字符串。在模糊查詢中, %表示任意字符(包括零個字符), _表示任意單個字符。

例如:

 SELECT * FROM users WHERE username LIKE '%admin%';

該查詢將返回username中包含admin的所有記錄。

3. 使用mysqli::stmt_initLIKE實現高效模糊搜索

接下來,我們將展示如何使用mysqli::stmt_init來實現一個高效的關鍵字模糊搜索。假設我們需要從數據庫中查找用戶,搜索條件是用戶名包含某個關鍵字。

步驟1: 初始化數據庫連接

首先,我們需要連接到數據庫:

 $mysqli = new mysqli("localhost", "username", "password", "database");

// 檢查連接
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

步驟2: 初始化預處理語句

我們使用mysqli::stmt_init來初始化一個預處理語句對象:

 $stmt = $mysqli->stmt_init();

步驟3: 創建模糊查詢語句

接下來,使用LIKE進行模糊查詢。我們使用?來代替參數,避免SQL 注入問題:

 $sql = "SELECT * FROM users WHERE username LIKE ?";

步驟4: 綁定參數

我們需要將用戶輸入的搜索關鍵字綁定到SQL 語句中的? ,並為LIKE查詢加上% ,表示模糊匹配:

 $searchKeyword = "%$keyword%";  // 用戶輸入的關鍵字,前後加上百分號
$stmt->prepare($sql);
$stmt->bind_param("s", $searchKeyword);  // "s" 表示綁定一個字符串類型的參數

步驟5: 執行查詢

執行查詢並獲取結果:

 $stmt->execute();
$result = $stmt->get_result();

步驟6: 處理結果

通過get_result()獲取查詢結果並進行處理,例如將結果輸出到瀏覽器:

 while ($row = $result->fetch_assoc()) {
    echo "User ID: " . $row['id'] . " - Username: " . $row['username'] . "<br>";
}

步驟7: 關閉連接

查詢完成後,別忘了關閉數據庫連接:

 $stmt->close();
$mysqli->close();

4. 總結

通過使用mysqli::stmt_init和預處理語句,我們可以有效地防止SQL 注入,並提高查詢性能。特別是在使用LIKE進行模糊查詢時,預處理語句可以幫助我們將查詢與用戶輸入的數據分離,增加安全性和效率。

此外,值得注意的是,雖然LIKE查詢在某些場景下非常有用,但在處理大量數據時,模糊查詢可能會導致性能問題。可以考慮通過數據庫索引或其他優化措施來進一步提升查詢效率。