Bagaimana Mengendalikan Penyata Disediakan dengan Keadaan IN() dalam WordPress?

Mary-Kate Olsen
Lepaskan: 2024-11-10 19:24:02
asal
227 orang telah melayarinya

How to Handle Prepared Statements with IN() Condition in WordPress?

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);
Salin selepas log masuk

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\"')
Salin selepas log masuk

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));
Salin selepas log masuk

Fungsi PHP Digunakan:

  • implode() - Menyertai elemen tatasusunan ke dalam rentetan
  • array_fill() - Mencipta tatasusunan yang diisi dengan nilai tertentu
  • call_user_func_array() - Memanggil fungsi dengan parameter diluluskan sebagai tatasusunan
  • array_merge() - Menggabungkan dua tatasusunan

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan