web-dev-qa-db-fra.com

Comment utiliser% like% dans l'instruction SQL wordpress

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

1
rocky

$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.

4
Stephen Harris