2016-07-07 15 views
0

laravelには、ユーザーがデータベースを検索するために入力できる検索ボックスがあります。Laravel/PDOはバックスラッシュまたは引用符をエスケープしませんか?

送信時に次のコードを実行します(ここで重要な部分を示しています)。

$searchBox = $request->get('searchBox'); 

... 
$getSearch->where(function($query) use($searchBox) { 
    $query->orWhere('event', 'LIKE', '%'.$searchBox.'%'); 
    $query->orWhere('sub_event', 'LIKE', '%'.$searchBox.'%'); 
}); 

使用は二重引用符( ")またはバックスラッシュ()クエリが失敗を入力すれば、問題はそれらの文字をエスケープすることはありませんように見えます。です。

私はこれを行う場合。

$searchBox = addslashes($searchBox); 

そして、それは素晴らしい作品。

これは(すべてのかどうかの問題)laravelまたはPDOの問題である場合、私は知らない。私は私がする必要がありますか?バックスラッシュのためにすべてのユーザー入力をサニタイズする必要がありますaddslを使用している灰?あるいは、これがどのように機能するのか理解していない。

検索条件にバックスラッシュや二重引用符が含まれている場合、mysql/PDO/laravelでLIKE検索を実行するにはどうすればよいですか?

おかげ

*編集

私は私が実際になっていたエラーが何であったかチェックしているはずです。私は今それをやった。

私はクエリを実行したときに私のウェブページリダイレクトループを与えていたので、それは奇妙なエラーを与えていると思った。しかし、以下の@David Smithのコメントは私にそれを再確認させました。それは、ループを引き起こしていたクエリの結果がゼロだったことが分かります。

申し訳ありませんが、私は最初からそれをより明確にすべきでした。クエリは実際には失敗しないので、結果は得られません。

しかし、バックスラッシュと二重引用符がある可能性のあるコメントやフィールドを検索できる人が必要です。

実際には、ループを修正すると、二重引用符が機能するように見えます。 0の結果をもたらすバックスラッシュだけです。バックスラッシュを含むフレーズを検索すると結果は得られません。

クエリーがバックスラッシュをエスケープ文字として扱うため、バックスラッシュを検索するのではなく、それは考えていません。

これが正しい場合は、ユーザーにバックスラッシュを含む語句を検索させる方法を教えてください。 addslashesはまだ行く方法ですか?

+0

それはパラメータ化使用しているためLaravelは、データをエスケープする必要はありません。クエリ。私の推測では、データベース内のデータには実際にスラッシュが含まれているはずです。 – patricus

+0

あなたは「クエリが失敗する」と言っています。これはどういう意味ですか? MySQLはエラーを返しますか、またはクエリは単にゼロの結果を返しますか? –

+0

@DavidSmithあなたは良い点を持っています、私は明確にするために編集しました。ここで失敗とは、ここではゼロ結果を意味します。 – Nertskull

答えて

1

backslash is a special character for LIKEです。したがって、この演算子でのみエスケープする必要があります。

あなたは確かにバックスラッシュのための慎重な試合をしなければならないのであれば、このコードでLIKE文で使用するためにあなたのデータを処理する

$data = addCslashes($data, '\\'); 
+0

LIKE演算子を使用する検索フィールドに常にaddCslashesを使用する必要がありますか?これは、通常のPDOクエリで行われるエスケープ処理を妨げません。 – Nertskull

+0

はい、使用する必要があります。いいえ、干渉してはいけません。 –

関連する問題