$wpdb->esc_like() の使い方|説明・引数・注意点

説明

$wpdb->esc_like() は、LIKE検索の値に含まれる % や _ などのワイルドカードをエスケープするメソッドです。

基本構文

$wpdb->esc_like( string $text ): string

引数

  • $text:エスケープする文字列

戻り値

エスケープした文字列。

使い方(サンプル)

global $wpdb;
$like = '%' . $wpdb->esc_like( $keyword ) . '%';
$sql = $wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_title LIKE %s", $like );

注意点

  • prepare() に渡す前に使います。

実務での使いどころ

  • LIKE 検索で、キーワードに含まれる、% や _ を、ただの文字として、扱うとき。

よくあるミスと対処

  • キーワードを、esc_like() に通さず、% を、ワイルドカードとして、解釈させている。
  • % を付けてから、esc_like() に通している。% も、エスケープされる。esc_like() のあとに、% を付ける。
  • esc_like() だけで、SQLの安全が確保できると考えている。$wpdb->prepare() も、併用する。

NG例

$like = $wpdb->esc_like( '%' . $keyword . '%' ); // % もエスケープされる

OK例

$like = '%' . $wpdb->esc_like( $keyword ) . '%';
$rows = $wpdb->get_results(
	$wpdb->prepare( "SELECT ID FROM {$wpdb->posts} WHERE post_title LIKE %s", $like )
);

使い分け早見表

関数 役割
$wpdb->esc_like() LIKE 用に、特殊文字をエスケープする
$wpdb->prepare() 値を含むSQLを、安全に組み立てる
esc_sql() SQL用に、文字列をエスケープする

関連項目

$wpdb->prepare()

公式リファレンス:wpdb::esc_like() | Class method | WordPress Developer Resources

コメント

タイトルとURLをコピーしました