J'aimerais utiliser une instruction LIKE% text% tout en utilisant la classe WordPress $ wpdb pour nettoyer et préparer les entrées.
SELECT column_1 from `prefix_my_table` WHERE column_2 LIKE '%something%';
J'ai essayé quelque chose comme ça en vain:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %s;", like_escape($number_to_put_in_like));
Comment préparer correctement une instruction% LIKE% SQL à l'aide de la classe de base de données WordPress?
La fonction $wpdb->esc_like
existe dans WordPress car l'échappement normal de la base de données n'échappe pas aux caractères %
et _
. Cela signifie que vous pouvez les ajouter dans vos arguments à wpdb::prepare()
sans problème. C’est aussi ce que je vois dans le code principal de WordPress :
$wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%');
Donc, votre code ressemblerait à ceci:
$wpdb->prepare(
"SELECT
column_1
FROM
`{$wpdb->base_prefix}my_table`
WHERE
column_2 LIKE %s;",
'%' . $wpdb->esc_like($number_to_put_in_like) . '%'
);
Vous pouvez également ajouter %%
dans votre requête pour obtenir un %
littéral (wpdb::prepare()
utilise vsprintf()
en arrière-plan, qui a cette syntaxe ), mais rappelez-vous que votre chaîne ne sera pas citée , vous devez ajouter cite vous-même (ce qui n’est pas ce que vous devez habituellement faire dans wpdb::prepare()
.
Vous devez doubler le pourcentage afin qu'ils ne soient pas traités comme des marqueurs de fragment par wpdb->prepare()
:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %%%s%%;", $wpdb->esc_like( $number_to_put_in_like));
PS pas sûr que ce soit la meilleure/seule façon de le faire.
C’est une façon de le faire que j’ai vérifiée et qui fonctionne:
$search_text = "%" . $_GET['some_text'] . "%";
$user_count = $wpdb->get_var(
$wpdb->prepare(
"SELECT COUNT(*) FROM mix_library WHERE ml_setting_name LIKE %s",
$search_text
)
);
Remplacez les variables pour répondre à vos besoins.