为了账号安全,请及时绑定邮箱和手机立即绑定

何时在MySQL中使用单引号,双引号和反引号

何时在MySQL中使用单引号,双引号和反引号

慕标5832272 2019-05-20 15:16:09
我正在尝试学习编写查询的最佳方法。我也理解保持一致的重要性。到现在为止,我已经随机使用单引号,双引号和反引号而没有任何实际想法。例:$query = 'INSERT INTO table (id, col1, col2) VALUES (NULL, val1, val2)';另外,在上述例子中,考虑到table,col1,val1等可以是变量。这是什么标准?你是做什么?我一直在这里阅读类似问题的答案大约20分钟,但看起来这个问题没有明确的答案。
查看完整描述

9 回答

?
米脂

TA贡献1836条经验 获得超3个赞

关于你的问题的SQL性质,上面有很好的答案,但如果你是PHP的新手,这也可能是相关的。)

也许重要的是要提到PHP处理单引号和双引号字符串不同...

单引号字符串是'文字',几乎是WYSIWYG字符串。PHP解释双引号字符串可能的变量替换(PHP中的反引号不完全是字符串;它们在shell中执行命令并返回结果)。

例子:

$foo = "bar";echo 'there is a $foo'; // There is a $foo
echo "there is a $foo"; // There is a bar
echo `ls -l`; // ... a directory list


查看完整回答
反对 回复 2019-05-20
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

反引号通常用于表示安全identifier并且不会意外地使用保留关键字

例如:

Use `database`;

这里的反引号将帮助服务器理解database实际上是数据库的名称,而不是数据库标识符。

可以对表名和字段名执行相同的操作。如果用反引号包装数据库标识符,这是一个非常好的习惯

查看答案以了解有关反引号的更多信息。


现在关于双引号和单引号(迈克尔已经提到过)。

但是,要定义一个值,您必须使用单引号或双引号。让我们看另一个例子。

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, title1);

在这里,我故意忘记title1用引号括起来。现在,服务器将采用title1列名称(即标识符)。因此,要表明它是一个值,您必须使用双引号或单引号。

INSERT INTO `tablename` (`id, `title`) VALUES ( NULL, 'title1');

现在,结合PHP,双引号和单引号使您的查询编写时间更容易。让我们在您的问题中看到查询的修改版本。

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

现在,在PHP中使用双引号,您将创建变量$val1,并$val2使用它们的值,从而创建一个完全有效的查询。喜欢

$val1 = "my value 1";$val2 = "my value 2";$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

会做的

INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, 'my value 1', 'my value 2')


查看完整回答
反对 回复 2019-05-20
?
慕村225694

TA贡献1880条经验 获得超4个赞

在MySQL中,这些符号是用来分隔查询`"'()

  1. "'用于封闭类似字符串的值"26-01-2014 00:00:00"'26-01-2014 00:00:00'。这些符号仅用于字符串,而不是聚合函数一样nowsummax

  2. ` 用于封闭表或列名称,例如 select `column_name` from `table_name` where id='2'

  3. ()简单地包含查询的一部分,例如 select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'


查看完整回答
反对 回复 2019-05-20
?
倚天杖

TA贡献1828条经验 获得超3个赞

MySQL和PHP中的字符串文字是相同的。

字符串是一个字节或字符序列,包含在单引号(“'”)或双引号(“”“)字符中。

因此,如果您的字符串包含单引号,那么您可以使用双引号来引用字符串,或者如果它包含双引号,那么您可以使用单引号来引用字符串。但是,如果您的字符串包含单引号和双引号,则需要转义用于引用字符串的字符串。

大多数情况下,我们对SQL字符串值使用单引号,因此我们需要对PHP字符串使用双引号。

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, 'val1', 'val2')";

你可以在PHP的双引号字符串中使用一个变量:

$query = "INSERT INTO table (id, col1, col2) VALUES (NULL, '$val1', '$val2')";

但是,如果$val1$val2包含单引号,那将使您的SQL出错。所以你需要在sql中使用之前将其转义; 这mysql_real_escape_string就是为了什么。(虽然准备好的陈述更好。)


查看完整回答
反对 回复 2019-05-20
?
手掌心

TA贡献1942条经验 获得超3个赞

结合PHP和MySQL,双引号和单引号使您的查询编写时间变得更加容易。


$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

现在,假设您正在使用直接post变量进入MySQL查询,那么使用它:


$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";

这是将PHP变量用于MySQL的最佳实践。


查看完整回答
反对 回复 2019-05-20
?
莫回无

TA贡献1865条经验 获得超7个赞

如果表cols和values是变量,那么有两种方法:


使用双引号""完整查询:


$query = "INSERT INTO $table_name (id, $col1, $col2)

                 VALUES (NULL, '$val1', '$val2')";

要么


 $query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")

               VALUES (NULL, '".$val1."', '".$val2."')";

单引号'':


$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')

             VALUES (NULL, '.$val1.', '.$val2.')';

``当列/值名称类似于MySQL保留关键字时,请使用反向标记。


注意:如果您使用表名表示列名,那么请使用这样的返回标记:


`table_name`。`column_name` < - 注意:. 从后面的刻度中排除。


查看完整回答
反对 回复 2019-05-20
?
慕森王

TA贡献1777条经验 获得超3个赞

这里有很多有用的答案,通常最终分为两点。


BACKTICKS(`)用于标识符名称。

单引号(')用于值。

和@MichaelBerkowski说


反引号用于表和列标识符,但仅在标识符是MySQL保留关键字时,或者当标识符包含空格字符或超出限制集的字符时才需要(见下文)。通常建议避免使用保留关键字作为保留关键字尽可能使用列或表标识符,避免引用问题。


但是有一种情况,即标识符既不是保留关键字,也不包含有限集之外的空格或字符,但必须围绕它们进行反引号。



123E10是有效的标识符名称,但也是有效的INTEGER文字。


[没有详细说明如何获得这样的标识符名称],假设我想创建一个名为的临时表123456e6。


反推没有错误。


DB [XXX]> create temporary table `123456e6` (`id` char (8));

Query OK, 0 rows affected (0.03 sec)

不使用反引号时出错。


DB [XXX]> create temporary table 123451e6 (`id` char (8));

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '123451e6 (`id` char (8))' at line 1

但是,它123451a6是一个非常精细的标识符名称(没有后退标记)。


DB [XXX]> create temporary table 123451a6 (`id` char (8));

Query OK, 0 rows affected (0.03 sec)

这完全是因为1234156e6它也是一个指数。


查看完整回答
反对 回复 2019-05-20
  • 9 回答
  • 0 关注
  • 1786 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信