j'utilise une instruction comme % text% dans wordpress:
SELECT * FROM location WHERE name LIKE "%on" OR name LIKE "%on%"
j'ai tout essayé mais ça n'a pas été couru:
$wpdb->get_results($wpdb -> prepare("SELECT * FROM location WHERE name LIKE %1s OR name LIKE %2s", '%'.like_escape('on'), '%'.like_escape('on').'%'), ARRAY_A);
aidez-moi, s'il vous plaît
$wpdb->prepare()
ne prend pas totalement en charge les espaces réservés sprintf()
.
Depuis le Codex :
Le paramètre de requête de prepare accepte les espaces réservés de type sprintf (). Les formats% s (chaîne),% d (entier) et% f (float) sont pris en charge.
Cela n’est pas tout à fait évident, mais les formats de permutation d’arguments (par exemple, %1$d
) ne sont pas pris en charge (dans tous les cas, la syntaxe est incorrecte: il devrait s'agir de %2$s
au lieu de %2s
) .
global $wpdb;
$wpdb->prepare(
"SELECT * FROM location
WHERE name LIKE %s OR name LIKE %s",
'%'.$wpdb->esc_like('on'),
'%'.$wpdb->esc_like('on').'%'
), ARRAY_A);
Je suppose que "sur" peut être remplacé par une valeur inconnue - sinon, $wpdb->prepare()
n'est pas nécessaire. Sur une note indépendante, la deuxième condition de votre code SQL rend la première obsolète.