3

重複の可能性:
MySQL - 単一引用符、二重引用符、およびバッククォートをいつ使用するか?

質問1

なぜこれが機能するのですか?

"SELECT `id` FROM `table` WHERE x= '".$y."'"

しかし、これではありませんか?

"SELECT `id` FROM `table` WHERE 'x' = '".$y."'"
                                ^ ^
                              Notice the extra single quotes

質問 2 (奇妙な引用符で) idよりもidを 使用する方が良いですか? それとも、二重引用符が変数として解釈するためですか?

4

1 に答える 1

6

でラップされているので、サーバーxは値として読み取るためsingle quoteです。backtickクエリ内で使用される予約済みキーワードをエスケープします。通常は、columnNamesおよびtableNamesをラップするために使用されます。

あなたのクエリでは、

SELECT `id` FROM `table` WHERE 'x' = '$y'

x列ではなく文字列値があります。

質問 2 では、これらのバッククォートidは ではないので削除できReserved Keywordます。MySQL で予約されているキーワードの完全なリストを次に示します。

補足として、クエリはSQL Injection. 予防方法については、以下の記事をご覧ください。PreparedStatements を使用すると、値を一重引用符で囲む必要がなくなります。

于 2012-12-25T04:06:35.877 に答える