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有什麼不同?
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有什麼不同?
行爲上的差異是因爲UNION
是MySQL中的保留字。除非它被轉義,否則它不能用作標識符。
在MySQL中,標識符可以通過將它們包含在反引號字符中來轉義。
第一條語句有效,因爲關鍵字FROM後面的標記被解釋爲標識符,因爲它包含在反引號字符中。
第二條語句是拋出語法錯誤,因爲令牌被解釋爲保留字UNION
以及其中MySQL是沒有預料到會出現在一個點(其中MySQL不允許它。)
摘錄:MySQL的SQL STAT內
反引號
標識符如果含有特殊字符或保留字,則必須使用反引號字符(`)引用它們。例如,要引用名爲FOO#BAR的表或名爲SELECT的列,您可以將標識符指定爲「FOO#BAR」和「SELECT」。由於反引號提供了額外的安全級別,因此它們廣泛用於程序生成的SQL語句中,其中標識名稱可能未提前知道。
許多其它數據庫系統使用雙引號(「)將這種特殊的名字。對於便攜性,你可以在MySQL使ANSI_QUOTES模式,並使用雙引號,而不是反引號來限定標識符名稱。
哦,是的..謝謝@spencer –
如果你想在第一個語句中使用與反引號關聯的「含義」,反引用詞就是「我們之間的字符被解釋爲*標識符*」。這就是他們的意思。反引號允許我們做的是使用通常不允許用作標識符的字符組合。例如,破折號字符不是標識符中的有效字符,也不允許是與保留字相匹配的字符組合。反引號字符允許我們使用違反通常強制執行的規則的名稱。 – spencer7593
是的,我明白了 –
的'是出了名分隔符;由於'UNION'是一個保留字,因此要將其用作字段或表的名稱,則必須始終分隔該名稱。另一個類似問題的例子是,如果你想從名爲'where'的表中選擇一個名爲'from'的字段, – Uueerdo