在 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 函數使用:
這種方法確保$villes 中的值得到正確的轉義和處理作為 IN() 條件中的單獨值。
以上是如何在 WordPress 中處理帶有 IN() 條件的準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!