1

これまでに、PHP を使用して MySQL の同じ列フィールドとキーワードでプロジェクトを実行しました。今日、再び PhpMyAdmin を使用してデータベースを管理すると、次のような警告メッセージが表示されました。

The column name 'order' is a MySQL reserved keyword.

私のプロジェクトは、キーワードorderを列名として使用しています。

私の質問はwhat are the risks or ... when we're using the same keyword of MySQL as table column

4

2 に答える 2

3

リスク?リスクを経験しました: クエリが実行されないため、修正する必要があります。

ほとんどのキーワードでは、キーワードが識別子と混同されても有効なクエリが生成される可能性はほとんどありません。もちろん、難解な例を思いつくこともできます。

修正は、識別子をエスケープすることです。MySQL はエスケープにバックティックを使用します。他のデータベースでは、二重引用符または角括弧が使用されます。したがって、別のリスクがあります。バックティックを使用すればするほど、コードの移植性が低下します。

私にとって、主な理由は書きやすさと読みやすさです。バックティック キーは、私のキーボードでは左上にあり、小さな小指が遠くまで手を伸ばさなければなりません。結果のコードを読むのは、難解な文字がたくさん浮かんでいるため、より面倒だと思います。わかりやすくするために、識別子のエスケープは避けてください。予約語を避け、文字、数字、およびアンダースコアのみを使用するだけで十分です。

別のリスクがあります。. . 一重引用符とバッククォートを混同する可能性があります。次に、クエリには、列の値があると思われる定数が含まれる場合があります。この混乱は、このコミュニティで最も一般的な MySQL の問題の 1 つです。

于 2014-06-12T11:05:50.193 に答える
0

クエリの順序の前後にバッククォート (`) を使用します。

例:

SELECT *
FROM TableName
WHERE `order`='someval'

サイドノート:

バックティックはテーブルと列の識別子に使用されますが、識別子が MySQL の予約済みキーワードである場合、または識別子に空白文字または制限されたセットを超える文字が含まれている場合にのみ必要です。可能な場合はテーブル識別子を使用して、引用の問題を回避します。

次のような状況では、バック ティックが必要です。

SELECT id, `my name`, `another field` , `field,with,comma`
于 2014-06-12T11:02:01.303 に答える