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