最近問題に遭遇したときのようなMySQLのクエリ、明らかに同じ文字列が、ではなく結果のように、多くのバック後の情報を見つけるために、そして最終的に文字列が問題を免れた、とMySQLのLIKEエスケープときそして通常の文字異なります。
テストではまず見て:
1 2 3 4 5 6 7 |
|
これは、LIKE中への逃避「「\\」見ることができる」LIKEエスケープ文字列をエスケープし、通常は少し異なるを使用しています。
私は、公式文書、エスケープ文字の解釈を確認しました:
バックスラッシュがパーサによって一度取り除かれているためと再びパターンマッチが行われたときに、これは、あります
合致させる単一のバックスラッシュを残して。
MySQLの独自のパーサーは一度脱出し、その後サブ正義の前LIKE結果のパターン。
それは、「\\」の一例である第一の時間は、第二は、「\」のようにエスケープのために「」
文字のエスケープMySQLのテストで見てみましょう
1 2 3 4 5 6 7 |
|
ああ、何もエスケープ(「X」、「b」はフォールバック文字であるような「X」としてエスケープ)、「%」をエスケープし、「_」ではありません。LIKEは、脱出してきました。私はそうすることのMYSQLの目的はそれLIKEの互換性のためにあるんです。
要約、LIKEエスケープ文字列、二回の合計、最初の時間はありません「%」をエスケープし、「_」の下で、二回目は、すべてエスケープ。特殊文字をエスケープすることはhttp://dev.mysql.com/doc/refman/5.1/en/string-literals.html#character-escape-sequencesで見つけることができます
エスケープLIKE最初「残りの文字列を」「に「\\」\」エスケープして、文字列の残りの部分、「」脱出を置き換えるとして見ることができます。通常は満たしていない、「\」、特別な分析LIKEは感知できないです。
特殊文字のフィルタリングなどのPHPのバージョン
1 2 3 |
|
最後の二重のバックスラッシュバックスラッシュは、実際には、8に1ターン4を回したが、PHPで文字列を変換する必要がある、周りにここで少し、あなたはそれについて考える、問題がある、あなたがメッセージを残すことができることに注意してください