WPDB готовить - как% - заполнители?

9

Являются ли эти {xxx...}заполнители для %оператора LIKE нормальными? Если так, когда они превращаются обратно в %'s?

SHELL
wp> global $wpdb;
wp> $q = "%s";
=> string(2) "%s"
wp> $pq = $wpdb->prepare($q, '%hi%');
=> string(136) "'{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}hi{6e039dc0b074a5ff6828a070d0c24708d132341f32dff55a053f1410beabaacd}'"
Павел
источник

Ответы:

12

Да, они нормальные. Они были добавлены в 4.8.3 для исправления уязвимости SQL-инъекций.

Вы можете прочитать статью, описывающую технические причины, по которой это происходит, здесь и билет на изменение здесь .

Символы - заполнителей заменяются случайными символами на последнюю строку $wpdb->prepare()с $wpdb->add_placeholder_escape()функцией, которая вызывает $wpdb->placeholder_escape()внутренне.

Эти заполнители удаляются в с $wpdb->query()помощью $wpdb->remove_placeholder_escape()функции , которая добавляется в качестве фильтра на queryкрючок.

Джейкоб Питти
источник