」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 WordPress 中處理帶有 IN() 條件的準備語句?

如何在 WordPress 中處理帶有 IN() 條件的準備語句?

發佈於2024-12-23
瀏覽:504

How to Handle Prepared Statements with IN() Condition in WordPress?

在 WordPress 中使用 IN() 條件處理準備語句

WordPress 提供準備語句來防止 SQL 注入攻擊並提高查詢效能。但是,在字串中使用具有多個值的 IN() 條件可能會帶來挑戰。

問題陳述:

考慮以下情況:

$villes = '"paris","fes","rabat"';
$sql = 'SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN(%s)';
$query = $wpdb->prepare($sql, $villes);

此程式碼未正確轉義字串,導致單一字串帶有轉義雙引號:

SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"paris\",\"fes\",\"rabat\"')

解:

正確在WordPress 中實作具有多個值的準備好的語句,請依照以下步驟操作:

// Create an array of the values to use in the list
$villes = array('paris', 'fes', 'rabat');

// Generate the SQL statement.
// Number of %s items based on length of $villes array
$sql = "
  SELECT DISTINCT telecopie
  FROM `comptage_fax`
  WHERE `ville` IN(" . implode(', ', array_fill(0, count($villes), '%s')) . ")
";

// Call $wpdb->prepare passing the values of the array as separate arguments
$query = call_user_func_array(array($wpdb, 'prepare'), array_merge(array($sql), $villes));

所使用的PHP 函數:

. ]
  • implode() -將陣列元素連接到string
  • array_fill() - 建立一個以特定值填入的陣列
  • call_user_func_array() - 使用作為參數傳遞的參數呼叫函數array
  • array_merge() -合併兩個陣列

此方法確保 $villes 中的值被正確轉義並在 IN() 條件中被視為單獨的值。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3