Sphinx PHP API コードで次の関数を見つけました。
function sphinxapi_EscapeString($string)
{
$from = ['\\', '(', ')', '|', '-', '!', '@', '~', '"', '&', '/', '^', '$', '=', '<'];
$to = ['\\\\', '\(', '\)', '\|', '\-', '\!', '\@', '\~', '\"', '\&', '\/', '\^', '\$', '\=', '\<'];
return str_replace($from, $to, $string);
}
ただし、クエリで特定の文字を含む文字列を使用すると、Sphinx が例外をスローするため、正しく機能していないようです。
例は引用文字"
です。EscapeString()
その前にバックスラッシュ\
を置きますが、Sphinx は次のような例外をスローします。
致命的なエラー:メッセージ「SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 インデックス my_index: 構文エラー、予想外の $end 付近の ''' 内のメッセージを含む例外 'PDOException' がキャッチされていません。
さらに 2 つのバックスラッシュを追加して にすると\\\"
、エラーはスローされません。
ここでの取引は何ですか?機能しないのはなぜEscapeString()
ですか?