PostgreSQL でのエスケープ文字列の一致
PostgreSQL では、'_ のような特殊文字を扱うときに LIKE 演算子を使用してパターンを一致させると問題が発生する可能性があります。 ' そして '%'。これらの文字はワイルドカードと一致し、意図しない結果を引き起こす可能性があります。リテラル一致を保証するには、それらを適切にエスケープすることが重要です。
LIKE に使用されるエスケープ文字は通常、バックスラッシュ () であり、パターン内の単一のエスケープ文字を表すには、これを 2 回繰り返す必要があります。たとえば、「rob_」は「_」文字をエスケープし、文字通り「rob_」で始まる文字列のみと一致させることができます。ただし、PostgreSQL 9.1 では、standard_conforming_strings 設定に応じてデフォルトのエスケープ文字が変更される可能性があります。
潜在的な問題を回避するには、REPLACE 関数を使用して、サーバー側で特殊文字をエスケープされた同等の文字に置き換えることをお勧めします。このアプローチは、追加のユーザー入力検証の必要性を排除するため、クライアント側でエスケープを処理するよりも安全です。
たとえば、次のクエリは、「_」と「%」のすべてのインスタンスを次のクエリに置き換えます。エスケープされた対応物を比較し、LIKE 比較を実行して、パターンが文字通り一致することを確認します。
SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'
サーバー側の置換を利用することで、正確かつ確実に一致することを確認できます。潜在的なセキュリティ脆弱性を回避しながら、明確なパターン マッチングを実現します。
以上がPostgreSQL で LIKE を使用してエスケープ文字列を安全に照合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。