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

我正在尝试学习编写查询的最佳方法。我也理解保持一致的重要性。到现在为止,我已经随机使用单引号,双引号和反引号而没有任何实际想法。

例:

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

另外,在上述例子中,考虑到tablecol1val1等可以是变量。

这是什么标准?你是做什么?

我一直在这里阅读类似问题的答案大约20分钟,但看起来这个问题没有明确的答案。


慕标5832272
浏览 1787回答 9
9回答

米脂

关于你的问题的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

胡子哥哥

反引号通常用于表示安全,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')

慕村225694

在MySQL中,这些符号是用来分隔查询`,",'和()。"或'用于封闭类似字符串的值"26-01-2014 00:00:00"或'26-01-2014 00:00:00'。这些符号仅用于字符串,而不是聚合函数一样now,sum或max。` 用于封闭表或列名称,例如 select `column_name` from `table_name` where id='2'(并)简单地包含查询的一部分,例如 select `column_name` from `table_name` where (id='2' and gender='male') or name='rakesh'。

倚天杖

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就是为了什么。(虽然准备好的陈述更好。)

手掌心

结合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的最佳实践。

莫回无

如果表cols和values是变量,那么有两种方法:使用双引号""完整查询:$query = "INSERT INTO $table_name (id, $col1, $col2)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VALUES (NULL, '$val1', '$val2')";要么&nbsp;$query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VALUES (NULL, '".$val1."', '".$val2."')";单引号'':$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;VALUES (NULL, '.$val1.', '.$val2.')';``当列/值名称类似于MySQL保留关键字时,请使用反向标记。注意:如果您使用表名表示列名,那么请使用这样的返回标记:`table_name`。`column_name` < - 注意:. 从后面的刻度中排除。

慕森王

这里有很多有用的答案,通常最终分为两点。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它也是一个指数。
打开App,查看更多内容
随时随地看视频慕课网APP