繁体   English   中英

mysql / php中单引号的类型

[英]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'就是这样,您正在选择一个包含字母sel等的文字字符串...它被视为字符串,而不是sql关键字或字段/表名称。

那意味着

SELECT ...
FROM 'food'

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

该键取决于您的键盘布局,但通常是重音符号(`)。

更多信息在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM