0

問題のステートメントは次のとおりです。

$sql="SELECT * FROM user WHERE id = '".$q."'";

q は整数です。次のように入力できるのに、なぜそのように入力するのですか

$sql="SELECT * FROM user WHERE id = $q"; 

これは整数であるため、引用符を正しく使用する必要はありません。または、引用符が必要な場合でも、1 組だけでよいわけではありません。の意味は何'".$var_name."'ですか?

4

2 に答える 2

2

は必要ありません''が、 と組み合わせ*real_escape_stringて有効にするには、これらの一重引用符が必要です。

ユーザー入力が:1 OR 1 = 1の場合、クエリは次のようになります。

SELECT * FROM user WHERE id = 1 OR 1 = 1

テーブル全体を選択するもの。

ただし、一重引用符を使用し*real_escape_string、ユーザー入力が1' OR '1' = '1の場合、クエリは次のようになります。

SELECT * FROM user WHERE id = '1\' OR \'1\' = \'1'

テーブル全体を選択するのではなく、1 つの ID だけを選択します。

tl;dr: 必要ありませんが、SQL インジェクションに対してコードを安全にします。

于 2013-07-26T21:57:05.820 に答える