首頁 >後端開發 >php教程 >如何處理 MySQL 準備語句中動態大小的參數清單?

如何處理 MySQL 準備語句中動態大小的參數清單?

DDD
DDD原創
2024-12-03 03:14:09402瀏覽

How to Handle Dynamically Sized Parameter Lists in MySQL Prepared Statements?

MySQL 準備語句中動態調整大小的參數清單

在 PHP 中建構 MySQL 準備語句時,出現瞭如何處理參數數量可變的查詢的問題。例如,考慮這樣的查詢:

SELECT `age`, `name` FROM `people` WHERE id IN (12, 45, 65, 33)

IN 子句中的 ID 數量隨每次執行而變化。

可能的解決方案

存在多種方法來解決此挑戰:

  1. 解決方案1:虛擬變數和多次調用

    • 建立一個接受固定數量變數(例如100個)的語句,並用虛擬值填滿未使用的槽。
    • 對更大的變數執行多個呼叫
  2. 解決方案2:非準備查詢

    • 動態構建查詢並執行它,確保嚴格的保護反對注射

最佳解決方案

但是,其他選項提供更好的效率:

  1. 臨時表方法

    • 建立一個臨時表,並將每個參數值插入其中。
    • 對臨時表執行簡單聯結。
  2. 動態 IN 子句

    • 使用 implode 和陣列預先填充,使用 IN子句的佔位符動態建構查詢
    • 例如:

      $dbh = new PDO(...);
      $parms = [12, 45, 65, 33];
      $inclause = implode(',', array_fill(0, count($parms), '?')); // = ?,?,?,?
      $preparesql = sprintf('SELECT age, name FROM people WHERE id IN (%s)', $inclause);
      $st = $dbh->prepare($preparesql);
      $st->execute($parms);

第一種方法對於大集合可能更有效,而第二種方法是適合較小的。

以上是如何處理 MySQL 準備語句中動態大小的參數清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn