入力をサニタイズして準備するためにWordPress $ wpdbクラスを使用しながら、LIKE%text%ステートメントを使用したいのですが。
SELECT column_1 from `prefix_my_table` WHERE column_2 LIKE '%something%';
私は無駄にこのようなことを試してみました:
$wpdb->prepare( "SELECT column_1 from `{$wpdb->base_prefix}my_table` WHERE column_2 LIKE %s;", like_escape($number_to_put_in_like));
WordPressデータベースクラスを使用して、どのようにして%LIKE%SQLステートメントを適切に準備しますか?
通常のデータベースエスケープは$wpdb->esc_like
および%
文字をエスケープしないため、_
関数はWordPressに存在します。つまり、問題なくそれらをwpdb::prepare()
の引数に追加できます。これはまた/ WordPressのコアコードで見たもの :
$wpdb->prepare(" AND $wpdb->usermeta.meta_key = '{$wpdb->prefix}capabilities' AND $wpdb->usermeta.meta_value LIKE %s", '%' . $this->role . '%');
だからあなたのコードはこんな感じになるでしょう:
$wpdb->prepare(
"SELECT
column_1
FROM
`{$wpdb->base_prefix}my_table`
WHERE
column_2 LIKE %s;",
'%' . $wpdb->esc_like($number_to_put_in_like) . '%'
);
また、クエリに%%
を追加してリテラル%
を取得することもできます(wpdb::prepare()
はバックグラウンドでvsprintf()
を使用します。 この構文は )。ただし、文字列は引用符で囲まない自分自身で引用符で囲みます(これはwpdb::prepare()
で通常行わなければならないことではありません)。
wpdb->prepare()
ではフラグメントマーカのように扱われないように、パーセントを2倍にする必要があります。
$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は、これが最善/唯一の方法であると確信していません。
これは私がチェックしてうまくいくようにするための1つの方法です。
$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
)
);
ニーズに合わせて変数を置き換えます。