web-dev-qa-db-fra.com

quels sont les nombres entre accolades dans la requête de recherche

je travaille avec des requêtes de recherche dans wordpress et j'ai remarqué que dans les requêtes d'origine, les termes sont entre accolades et chiffres ... comme ceci:

wp_posts.post_title LIKE '{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}11{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}'

qu'Est-ce que c'est ?

merci

4
Aliiiiiiii

Ce sont des espaces réservés pour les signes %. Si vous envoyez % dans la valeur à comparer avec vous-même, vous remarquerez qu'il est en train de transformer '%test%' en wp_posts.post_title LIKE '{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}\{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}11{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}\{30d0e4b86a2a793010a75740f60810aff6b57f6d18edc10be7ca6dc158e40c06}' lorsque vous regardez $query->request.

La requête côté base de données aura %. Je n'ai pas cherché à savoir pourquoi et où c'était fait, mais je l'ai remarqué trop récemment. Je crois que ce n'était pas le cas il y a quelques versions, donc il pourrait s'agir d'une mise à jour récente.

Edit: je l'ai examiné un peu plus. Il a été ajouté dans 4.8.3 et provient de wpdb:

/**
 * Adds a placeholder escape string, to escape anything that resembles a printf() placeholder.
 *
 * @since 4.8.3
 *
 * @param string $query The query to escape.
 * @return string The query with the placeholder escape string inserted where necessary.
 */
public function add_placeholder_escape( $query ) {
    /*
     * To prevent returning anything that even vaguely resembles a placeholder,
     * we clobber every % we can find.
     */
    return str_replace( '%', $this->placeholder_escape(), $query );
}

/**
 * Removes the placeholder escape strings from a query.
 *
 * @since 4.8.3
 *
 * @param string $query The query from which the placeholder will be removed.
 * @return string The query with the placeholder removed.
 */
public function remove_placeholder_escape( $query ) {
    return str_replace( $this->placeholder_escape(), '%', $query );
}

Le ticket de trac correspondant était # 41925 , et il a été introduit pour s'assurer que le code SQL ne contenait aucun élément pouvant être mal interprété comme un espace réservé par sprintf, tout en renvoyant des espaces réservés numérotés "de retour" (qui n'étaient jamais officiellement pris en charge mais ils ont été enlevés pour des raisons de sécurité).

4
janh