PostgreSQL クエリでのリテラル パターン マッチング
PostgreSQL で文字列列に対して LIKE パターン マッチングを実行するには、ユーザー指定の入力を処理するときに特別な注意が必要です。特殊文字 (「_」や「%」など) を含む未検証の入力により、検索結果が意図せず拡大される可能性があります。この問題に対処するには、これらの文字が文字通りに解釈されることを確認する必要があります。
クライアント側またはサーバー側のエスケープ
でエスケープを処理するかどうかの決定クライアント側かサーバー側かは、特定の要件によって異なります。クライアント側のエスケープでは、アプリケーション コード内のユーザー入力をデータベースに送信する前に前処理する必要があります。このアプローチでは、より詳細な制御が可能ですが、追加の処理ロジックが必要です。
サーバー側エスケープ
PostgreSQL は、サーバー側エスケープのためのより洗練されたソリューションを提供します。 LIKE ステートメントで ESCAPE 句を使用すると、ワイルドカード文字の引用に使用する特殊文字を指定できます。これにより、正規表現のメタ文字として解釈されなくなります。
たとえば、次のクエリは文字列 "rob" と完全に一致します。
SELECT * FROM users WHERE name LIKE 'rob%' ESCAPE '^'
エスケープに関する考慮事項
サーバー側エスケープを使用する場合は、次の点を考慮することが重要です:
Go-PGSQL の例
Go-PGSQL の場合、次のクエリを使用してリテラル パターン マッチングを実行できます。
db.Query("SELECT * from USERS where name like replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'", variable_user_input);
このクエリは次のクエリを使用します。ワイルドカード文字をエスケープするサーバー側の置換、代替エスケープ文字、および SQL インジェクションを保護しながらリテラルの一致を保証する二重エスケープ。
以上が検索結果の意図しない範囲拡大を避けるために、PostgreSQL クエリでリテラル パターン マッチングを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。