1

データベースの種類によって異なる場合がありますが、(コーダーではなくデータベースによる)設定がありますか、それとも引用符を使用する方がよいでしょうか?それは...ですか:

  • もっと早く?
  • エラーが発生しにくいですか?
  • 注射を防ぐのに役立ちますか(PDOを使用しているかどうか)?

使用を必要とするものは何もないと仮定します(スペース、予約語など)。

MySQL:

SELECT `id` FROM `table` WHERE `name` = '$name';

ANSI:

SELECT "id" FROM "table" WHERE "name" = '$name';

vs:

SELECT id FROM table WHERE name = $name;

この回答は、MySQLで引用符を使用するための要件について説明していますが、データベースで引用符が必要ない場合に興味がありますが、上記の側面(およびおそらくそれ以上)には好ましい/優れている可能性があります。

4

4 に答える 4

4

識別子の前後の引用符は、クエリの解析段階(SQLステートメントを通過してその構文要素を把握する段階)でのみ使用されます。他の段階(クエリの最適化、クエリの実行、および結果の呼び出し元への返送)と比較すると、解析段階は比較的短いです。したがって、特定のRDBMSに関係なく、識別子を引用符で囲むことによる測定可能なスピードアップまたはスローダウンを期待するべきではありません。

多かれ少なかれエラーが発生しやすい限り、マルチパート識別子の周りの引用符の欠落は開発段階ですぐに明らかになります。したがって、人間の可読性が大幅に低下するため、どこにでも引用符を配置することは問題になりません。

最後に、識別子の前後に引用符を追加しても、インジェクション攻撃を防ぐのに役立ちません。すべての識別子を引用符で囲まない場合も同様です。if多くのSQLスクリプトジェネレータは、識別子がマルチパートであるかどうかをテストするスクリプト全体でステートメントを回避するために、このルートを採用しています。

すべての識別子を引用することが良い考えである唯一の状況は、プログラムでSQLを生成する場合であり、その結果は人間の読者を対象としていません。

于 2013-01-02T16:32:15.940 に答える
3

私は引用符で囲まれた識別子を使用するのが好きではありません。入力に時間がかかりすぎてコードが乱雑になり、人間が読みにくくなります。

また、SQLでの識別子としての予約語の使用はお勧めしません。私にとって、これは良い習慣です。つまり、次のようなものを読みたい人は次のようになります。

select `select`, `from` as `as`
from <some really messed up table>
于 2013-01-02T16:34:26.437 に答える
0

読みやすいのでボトムバージョンを使用しますが、クエリをエコーし​​た方法によって異なります。必要がない限り引用符を超えて読み取るため、パフォーマンスに違いはありません。したがって、クエリに複数の変数を含むWHERE句を記述しない限り、実際にはわかりません。

于 2013-01-02T16:35:29.130 に答える
-1

数値識別子に引用符を使用しない方が速いと思います。データ型変換の潜在的なオーバーヘッドを、(おそらく)可能な限りパフォーマンスを高めたいクエリに追加するのはなぜですか?

于 2013-01-02T16:30:09.050 に答える