mysql / php中的撇号类型

时间:2013-11-25 17:48:03

标签: php mysql apostrophe

我在mysql中遇到了一个查询示例:

SELECT `id`, `food`, `calories`, `healthy_unhealthy` FROM `food` WHERE 1  //works

将其输入Codelobster,就像这样:

$query = "SELECT 'id', 'food', 'calories', 'healthy_unhealthy' FROM 'food'"; //fails

撇号是不同的。它失败了:

  

您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在

行的“食物”附近使用正确的语法

如果我使用那个有效的并将它放入$ query中,它就可以了。

$query = "SELECT `id`, `food`, `calories`, `healthy_unhealthy` FROM `food`"; //works

如果在php编辑器上执行此操作,则撇号不起作用,因为它不同。只是这种改变使它无法运作。是否有一个键可用于该样式或php编辑器中的设置?

4 个答案:

答案 0 :(得分:0)

反引号是mysql语法,用于包装表名和表以明确地标识它们。常规单引号用于普通字符串分隔符。区别在于例如

`id`

时引用一列

'id'

只是一个字符串。或者你可以使用NO反引号作为列或表名,只要它们不是mysql保留字(你不应该这样做)

例如,如果您在名为foo的表中有一个名为bar的列,则可以执行

$sql = "select `foo` from `bar`"; 

$sql = "select foo from bar";

但是如果你有一个名为count的列,那么你必须将它包装在反引号中,因为count是mysql中的保留字:

$sql = "select `count` from bar"; 

..但如上所述,您不应该将列或表命名为保留字。这是不好的做法。虽然mysql允许这样做,但如果你用反引号包装,并不是所有的数据库都支持这个,所以它会使你的查询不那么便携。

答案 1 :(得分:0)

`被称为反引号,它们使得它们之间被解释为100%字面解释。这实际上可以让你拥有具有语法含义的字符实际上用作表名或数据库名称(以及其他内容)。虽然在表名等中使用具有语法含义的字符是不好的做法,但是自动程序必须考虑到这一点,因此将所有表名和列名括起来并等同于反引号。

答案 2 :(得分:0)

反引号用于转义MySQL中的保留字,例如如果您的表中有一个名为select的字段,那么

SELECT select
FROM ...

会出现语法错误,因为MySQL无法分辨字段是什么以及SQL“脚手架”的一部分。但是如果你使用反引号:

SELECT `select`
FROM ...

然后它告诉MySQl select是一个字段(或表名),不应被视为sql关键字。

使用单'引号,您可以将字符串转换为字符串:

SELECT 'select'
FROM ...

既然'select'就是这样,你就选择了一个包含字母sel等的文字字符串......它是被视为字符串,而不是sql关键字或字段/表名。

这意味着

SELECT ...
FROM 'food'

失败,因为您尝试从文字字符串中进行选择。它不是表名,也不能从。

中选择

答案 3 :(得分:0)

键取决于你的键盘布局,但一般来说它是一个重音坟墓(`)。

More information here