在 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