Mengendalikan Penyata Disediakan dengan Keadaan IN() dalam WordPress
WordPress menyediakan pernyataan yang disediakan untuk melindungi daripada serangan suntikan SQL dan meningkatkan prestasi pertanyaan. Walau bagaimanapun, menggunakan keadaan IN() dengan berbilang nilai dalam rentetan boleh menimbulkan cabaran.
Pernyataan Masalah:
Pertimbangkan situasi berikut:
$villes = '"paris","fes","rabat"'; $sql = 'SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN(%s)'; $query = $wpdb->prepare($sql, $villes);
Kod ini tidak melepaskan rentetan dengan betul, menghasilkan rentetan tunggal dengan petikan berganda yang terlepas:
SELECT distinct telecopie FROM `comptage_fax` WHERE `ville` IN('\"paris\",\"fes\",\"rabat\"')
Penyelesaian:
Untuk melaksanakan dengan betul yang disediakan pernyataan dengan berbilang nilai dalam WordPress, ikuti langkah berikut:
// 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));
Fungsi PHP Digunakan:
Pendekatan ini memastikan bahawa nilai dalam $villes dilepaskan dengan betul dan dianggap sebagai nilai yang berasingan dalam keadaan IN().
Atas ialah kandungan terperinci Bagaimana Mengendalikan Penyata Disediakan dengan Keadaan IN() dalam WordPress?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!