2016-04-22 86 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

反引號將字符串包裝爲一個名爲literal的字符串,而不是由MySQL引擎解釋。單詞union是一個保留/關鍵字,因此MYSQL將期待使用不同的語法,因爲它不會意識到您將該單詞用作名稱標識符。

你會很好地閱讀和學習MySQL手冊中的this page。如果你希望MySQL把它當作名字,那麼這個頁面列表中的每一個單詞都應該在MySQL查詢中加入反引號。

它也是有用的儘可能名稱列/表與關鍵字或保留字!

+0

哦是的..謝謝 –

+0

@SalmanQuader我已經更新了我的答案,爲你提供了一些更多的細節。 – Martin

0

行爲上的差異是因爲UNION是MySQL中的保留字。除非它被轉義,否則它不能用作標識符。

在MySQL中,標識符可以通過將它們包含在反引號字符中來轉義。

第一條語句有效,因爲關鍵字FROM後面的標記被解釋爲標識符,因爲它包含在反引號字符中。

第二條語句是拋出語法錯誤,因爲令牌被解釋爲保留字UNION以及其中MySQL是沒有預料到會出現在一個點(其中MySQL不允許它。)

從MySQL參考手冊

摘錄:MySQL的SQL STAT內

反引號

標識符如果含有特殊字符或保留字,則必須使用反引號字符(`)引用它們。例如,要引用名爲FOO#BAR的表或名爲SELECT的列,您可以將標識符指定爲「FOO#BAR」和「SELECT」。由於反引號提供了額外的安全級別,因此它們廣泛用於程序生成的SQL語句中,其中標識名稱可能未提前知道。

許多其它數據庫系統使用雙引號(「)將這種特殊的名字。對於便攜性,你可以在MySQL使ANSI_QUOTES模式,並使用雙引號,而不是反引號來限定標識符名稱。

+0

哦,是的..謝謝@spencer –

+0

如果你想在第一個語句中使用與反引號關聯的「含義」,反引用詞就是「我們之間的字符被解釋爲*標識符*」。這就是他們的意思。反引號允許我們做的是使用通常不允許用作標識符的字符組合。例如,破折號字符不是標識符中的有效字符,也不允許是與保留字相匹配的字符組合。反引號字符允許我們使用違反通常強制執行的規則的名稱。 – spencer7593

+0

是的,我明白了 –

-1

差異是,如果mysql語句中的任何單詞用引號(`)引用,則mysql假設您引用表或列或某個mysql字段。

有關進一步的說明可以簽出this答案

感謝, RK

相關問題