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

Mary-Kate Olsen
發布: 2024-11-10 19:24:02
原創
227 人瀏覽過

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() - 將陣列元素連接成字串
  • array_fill() -創建一個填充的數組具有特定的value
  • call_user_func_array() - 使用以數組形式傳遞的參數調用函數
  • array_merge() -合併兩個陣列

這種方法確保$villes 中的值得到正確的轉義和處理作為 IN() 條件中的單獨值。

以上是如何在 WordPress 中處理帶有 IN() 條件的準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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