[英]Type of apostrophe in mysql/php
我在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服务器版本相对应的手册以获取正确的语法,以在行“ food”附近使用
如果我选择一个可行的并将其放入$ query中,它就会奏效。
$query = "SELECT `id`, `food`, `calories`, `healthy_unhealthy` FROM `food`"; //works
如果在php编辑器上执行此操作,则撇号不起作用,因为它是不同的。 仅仅凭这种改变就不能使它起作用。 有没有可以用于该样式的键或php编辑器中的设置?
反引号是mysql语法,用于包装表名和表以明确地标识它们。 常规单引号用于常规字符串定界符。 区别是例如
`id`
引用一列
'id'
只是一个字符串。 或者,您可以对列或表名使用NO反引号,只要它们不是mysql保留字即可(无论如何您都不应这样做)
例如,如果在名为bar
的表中有一个名为foo
的列,则可以执行
$sql = "select `foo` from `bar`";
要么
$sql = "select foo from bar";
但是,例如,如果您有一个名为count
的列,则必须将其包装在反引号中,因为count
是mysql中的保留字:
$sql = "select `count` from bar";
..但是如上所述,您无论如何都不应该将列或表命名为保留字。 这是不好的做法。 尽管如果使用反引号,mysql允许这样做,但并非所有数据库都支持此功能,因此会使查询的可移植性降低。
`称为反引号,它们使被解释的内容在字面上100%解释。 实际上,这可能允许您将具有句法含义的字符实际用作表名或数据库名(除其他外)。 尽管在表名等中使用具有句法含义的字符是不好的做法,但是自动化程序必须考虑到这一点,因此将所有表名和列名都用反引号引起来。
反引号用于在MySQL中转义保留字,例如,如果表中有一个名为select
的字段,则
SELECT select
FROM ...
这将是一个语法错误,因为MySQL无法分辨出什么是字段以及SQL“脚手架”的组成部分。 但是,如果您使用反引号:
SELECT `select`
FROM ...
然后它告诉MySQl select
是一个字段(或表名),并且不被视为sql关键字。
采用单'
引号,你做的东西转换成字符串:
SELECT 'select'
FROM ...
现在'select'
就是这样,您正在选择一个包含字母s
, e
, l
等的文字字符串...它被视为字符串,而不是sql关键字或字段/表名称。
那意味着
SELECT ...
FROM 'food'
失败,因为您尝试从文字字符串中进行选择。 它不是表名,也不能从中选择。
该键取决于您的键盘布局,但通常是重音符号(`)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.