WPDB menyiapkan - seperti% - penampung?

9

Apakah {xxx...}placeholder ini %dalam pernyataan LIKE adalah normal? Jika demikian, kapan mereka dikonversi kembali ke %?

SHELL
wp> global $wpdb;
wp> $q = "%s";
=> string(2) "%s"
wp> $pq = $wpdb->prepare($q, '%hi%');
=> string(136) "'{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}hi{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}'"
Paul
sumber

Jawaban:

12

Ya, itu normal. Mereka ditambahkan dalam 4.8.3 untuk memperbaiki kerentanan injeksi SQL.

Anda dapat membaca artikel yang menjelaskan alasan teknis untuk hal ini terjadi di sini dan tiket untuk perubahan di sini .

Karakter placeholder digantikan oleh karakter acak pada baris terakhir $wpdb->prepare()dengan $wpdb->add_placeholder_escape()fungsi, yang memanggil secara $wpdb->placeholder_escape()internal.

Tempat penampung ini dihapus $wpdb->query()oleh $wpdb->remove_placeholder_escape()fungsi yang ditambahkan sebagai filter ke querypengait.

Jacob Peattie
sumber