I’d like to use a LIKE %text% statement while still using the WordPress $wpdb class to sanitize and prepare input.
SELECT column_1 from `prefix_my_table` WHERE column_2 LIKE '%something%';
I’ve tried something like this to no avail:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %s;", like_escape($number_to_put_in_like));
How do you properly prepare a %LIKE% SQL statement using the WordPress database class?
The
$wpdb->esc_like
function exists in WordPress because the regular database escaping does not escape%
and_
characters. This means you can add them in your arguments towpdb::prepare()
without problem. This is also what I see in the core WordPress code:So your code would look like:
You can also add
%%
in your query to get a literal%
(wpdb::prepare()
usesvsprintf()
in the background, which has this syntax), but remember that your string will not be quoted, you must add the quotes yourself (which is not what you usually have to do inwpdb::prepare()
.You need to double percent so they are no treated like fragment markers by
wpdb->prepare()
:PS not sure this is best/only way to do it.
This is one way to do it that I’ve checked and it works:
Replace variables to suit your needs.
I found a suitable solution with the above codes. Definitely try it.