WPDB prepara - como% - marcadores de posición?

9

¿Son normales estos {xxx...}marcadores de posición %en una declaración LIKE? Si es así, ¿cuándo se convierten de nuevo a %'s?

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

Respuestas:

12

Si, son normales. Se agregaron en 4.8.3 para corregir una vulnerabilidad de inyección SQL.

Puede leer un artículo que describe las razones técnicas para que esto suceda aquí y el boleto para el cambio aquí .

Los caracteres de marcador de posición se reemplazan por los caracteres aleatorios en la última línea de $wpdb->prepare()con la $wpdb->add_placeholder_escape()función, que llama $wpdb->placeholder_escape()internamente.

Estos marcadores de posición se eliminan $wpdb->query()mediante la $wpdb->remove_placeholder_escape()función que se agrega como un filtro al querygancho.

Jacob Peattie
fuente