ホームページ > バックエンド開発 > PHPチュートリアル > PDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?

PDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-16 16:59:03
オリジナル
774 人が閲覧しました

How to Bind LIKE Values with the % Character in PDO?

PDO での % 文字を使用した LIKE 値のバインド

PDO 駆動の SQL クエリでは、% ワイルドカード文字を含む LIKE 値をバインドする必要があることがよくあります。このような値をバインドすると、SQL インジェクションが確実に防止されます。ただし、そのための構文は混乱する可能性があります。

LIKE '%' を使用したクエリ: バインディングの考慮事項

次のクエリを考えてみましょう。

select wrd from tablename WHERE wrd LIKE '$partial%'
ログイン後にコピー

ここでは、次のようにします。 PDO を使用して変数 $partial をバインドします。 % 文字をバインドする方法を決定するときにジレンマが発生します。

バインドのオプション

オプション 1:

select wrd from tablename WHERE wrd LIKE ':partial%'
ログイン後にコピー

$ に :partial をバインドするPartial="somet".

オプション2:

select wrd from tablename WHERE wrd LIKE ':partial'
ログイン後にコピー

:partial を $partial="somet%" にバインドします。

オプション 3 (代替):

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')
ログイン後にコピー

MySQL CONCAT を使用して文字列連結を実行するfunction.

特別な場合の考慮事項

検索対象の部分単語に % またはアンダースコア文字が含まれている場合は、特別な処理が必要です。解決策には、PDO ステートメントで ESCAPE 句を使用することが含まれます。

$stmt = $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped = str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);
ログイン後にコピー

この手法により、LIKE 式内で特殊文字が正しく解釈されることが保証されます。

以上がPDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート