En utilisant comme déclaration avec wpdb- $> prepare montrant hash où des caractères génériques sont

voix
0

Je suis en train de construire une déclaration préparée avec des jokers mais je suis en cours d'exécution dans un problème où les caractères génériques de pourcentage semblent revenir ce qui semble être hash pour les wildcards et je ne sais pas pourquoi. Le code en question est:

$condition = $wpdb->prefix.posts.post_title LIKE %%%s%%;
$query['conditions'][] = $wpdb->prepare($condition, $name);

Et les résultats sont les suivants:

posts.post_title LIKE {d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}BT{d690dd63f5944b9bca120e110c22802f0ec841d8120d813dd4abc08cba4a59c0}

Me demandais simplement si quelqu'un avait des idées sur ce qui pourrait être la cause. Toute aide serait grandement appréciée.

Merci

Créé 18/12/2018 à 11:02
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
0

Le caractère générique pour LIKE doit être au sein de toute variable qui est notée %s. Sinon , il devient le jeton pour le paramètre mélangé avec le caractère générique SQL. Même si ce n'était pas un problème, vous devez le faire comme ça de toute façon , car sinon le% ne sera pas échappé dans la chaîne et vous vous retrouverez avec une erreur de syntaxe SQL.

En d' autres termes , vous devez ajouter les jokers à la $namevaleur elle - même. Cela devrait faire le travail, je pense:

$condition = $wpdb->prefix."posts.post_title LIKE %s";
$name = '%'.$name.'%';
$query['conditions'][] = $wpdb->prepare($condition, $name);
Créé 18/12/2018 à 11:07
source utilisateur

voix
0

Ne vous inquiétez pas les hash, ils vont se remplacés par% dans wpdb de $ lorsque vous exécutez votre requête.

Ces hash ont été introduits avec WP v4.8.3 comme une solution pour l'attaque d'injection SQL.

Ils sont des espaces réservés pour le caractère%. Il empêche quelqu'un d'utiliser autre chose que% s,% d et f%. S'il y a un% autre que les utilisations approuvées, il va remplacer le% avec un hachage. Ce hachage va se remplacer revenir à% quand $ wpdb exécute la requête.

Si vous voulez supprimer les hash - vous, vous pouvez utiliser remove_placeholder_escape(), comme ceci:

$query['conditions'][] = $wpdb->remove_placeholder_escape($wpdb->prepare($condition, $name));

Créé 12/09/2019 à 23:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more