首頁 > 資料庫 > mysql教程 > 如何有效地使用 MySQLi 預先準備語句和 IN 運算子?

如何有效地使用 MySQLi 預先準備語句和 IN 運算子?

Mary-Kate Olsen
發布: 2024-12-27 00:12:10
原創
463 人瀏覽過

How to Use MySQLi Prepared Statements with the IN Operator Effectively?

使用IN 運算子的MySQLi 準備語句

準備語句允許您單獨指定參數值,從而比傳統查詢提供增強的安全性和性能聲明本身。但是,當涉及到將準備好的語句與 IN 運算子一起使用時,如果您的方法不正確,則可能會遇到問題。

問題

如最初所述查詢時,使用 bind_param('s', $in_statement)將逗號分隔的值字串綁定到準備好的語句將不會產生結果,即使資料存在於

解決方案

解決方案在於單獨處理每個參數值:

  1. 建立一個包含編號鍵和傳遞值的陣列透過引用明確地指向它。
  2. 計算參數的數量並建立一個具有適當數量的 i 字元的字串,表示它們的資料類型。
  3. 將資料型別字串與問號陣列組合起來,形成準備好的語句的參數字串。
  4. 將資料型別字串取消移至參數值陣列中。
  5. 使用call_user_func_array將參數值數組綁定到準備好的

範例程式碼

<?php
$lastnames = ['braun', 'piorkowski', 'mason', 'nash'];
$arParams = [];

foreach ($lastnames as $key => $value) {
    $arParams[] = &$lastnames[$key];
}

$count_params = count($arParams);
$int = str_repeat('i', $count_params);
array_unshift($arParams, $int);

$q = array_fill(0, $count_params, '?');
$params = implode(',', $q);

$data_res = $mysqli->prepare("SELECT `id`, `name`, `age` FROM `users` WHERE `lastname` IN ({$params})");
call_user_func_array([$data_res, 'bind_param'], $arParams);
$data_res->execute();
$result = $data_res->get_result();

while ($data = $result->fetch_array(MYSQLI_ASSOC)) {
    // Your code here...
}

$result->free();
$data_res->close();
登入後複製

範例程式碼

此方法允許您使用IN運算子將多個值正確綁定到準備好的語句。

以上是如何有效地使用 MySQLi 預先準備語句和 IN 運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板