2016-04-22 6 views
0
 

1) "select * from `union` WHERE `thanaId`='$thana_id'" // it's working 
    VS 
2) "select * from union WHERE thanaId='$thana_id'" // it's not working 

1 SQLクエリは正常に実行されますが、2 SQLクエリは正しく実行できません。 [``]の意味は何ですか..
1 SQLクエリと2 SQLクエリの違いは何ですか?FROM `tableName`とFROM tableNameの違いは何ですか?

+0

'名の区切り文字です。 'UNION'は予約語であるため、フィールドまたは表の名前として使用するには、その名前を常に区切る必要があります。同様の問題のもう一つの例は 'where'というテーブルから' from'というフィールドを '選択 'したい場合です。 – Uueerdo

答えて

2

バックテックは、処理される文字列を、MySQLエンジンによって解釈されるのではなく、literalという名前の文字列としてエンコードします。単語unionは予約された/キーワードなので、MYSQLはこの単語を名前識別子として使用していることを認識しないため、別の構文が必要になります。

this pageは、MySQLのマニュアルから読んで学習するのがよいでしょう。このページのリストのすべての単語は、MySQLが名前として扱うようにするには、MySQLクエリのバッククォートで囲む必要があります。

でないこともあります。キーワードまたは予約語の名前の列/表!

+0

oh yes ..ありがとう –

+0

@SalmanQuader私はいくつかの詳細をあなたのために私の答えを更新しました。 – Martin

0

UNIONはMySQLの予約語です。エスケープされない限り、識別子として使用することはできません。

MySQLでは、識別子はバックティック文字で囲むことでエスケープすることができます。

キーワードFROMに続くトークンは、バックティック文字で囲まれているため、識別子として解釈されるため、最初の文が機能します。

トークンは予約語UNIONとして解釈され、それは(MySQLはそれを許可しない場合。)MySQLはそれを期待されていない

スポットに現れるため、2番目の文は、構文エラーを投げていますMySQLリファレンスマニュアルから

抜粋:MySQLのSQLスタット内

バッククォート

識別子ementsは、特殊文字や予約語が含まれている場合、バックティック文字( `)を使用して引用符で囲む必要があります。たとえば、FOO#BARという名前のテーブルまたはSELECTという名前のカラムを参照するには、識別子を `FOO#BAR`と` SELECT`と指定します。バックティックは安全性を高めるため、プログラム生成のSQL文で広く使用されています。識別子の名前はあらかじめわかっていない可能性があります。

他の多くのデータベースシステムは、このような特別な名前を二重引用符( ")を使用する。識別子名を修飾する移植性のために、あなたはMySQLではANSI_QUOTESモードを有効にすることができますし、バッククォートの代わりに二重引用符を使用しています。

+0

oh yes ..ありがとう@spencer –

+0

最初のステートメントで使用されているバッククォートに「意味」を付ける場合、バッククォートは「私たちの間の文字は*識別子*と解釈される」と言っています。それが彼らの意味です。これらのバッククォートは、通常は識別子として許可されていない文字の組み合わせを使用することを可能にします。たとえば、ダッシュ文字は識別子の有効な文字ではなく、予約語と一致する文字の組み合わせも許可されません。バックティック文字は、通常強制される規則に違反する名前を使用することを許可します。 – spencer7593

+0

はい私は理解しています –

-1

違いmysql文の中の単語がバックティック( `)でクォートされていると、mysqlはあなたがテーブルやカラム、またはいくつかのmysqlフィールドを参照しているとみなします。

さらに手順については、あなたがthis答えをチェックアウトすることがあり

おかげで、 RK

関連する問題