在 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() 條件中被視為單獨的值。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3