如何在 mysql 查询中正确设置引号和双引号的格式

How to correctly format quotation marks and double quotes in mysql query

我目前正在使用 PDO 连接执行一些 mysql 查询,因为我使用命令 $conn->prepare("HERE THE QUERY") 我想知道如何格式化引号和双引号等字符。

当我遇到这样的情况时:

$conn->prepare("SELECT * FROM ('SELECT DISTINCT (user_id) FROM table1')");

这很好,因为在嵌套的 SELECT 中没有特定字符会导致问题。但是我们如何处理这样的特殊情况呢?

这里有一个奇怪的例子(忘记了mysql..这是无关紧要的,关注引号的情况)在嵌套的[=中有引号和双引号32=]:

$conn->prepare("SELECT * FROM ('SELECT user_id, CONCAT('[\"",GROUP_CONCAT(DISTINCT(cat) ORDER BY user_id DESC SEPARATOR "\",\""),"\"]') cat_grouped FROM table_1') select1");

根据此示例查询,正确的引号语法应该是什么?如果我在准备查询时使用 ' 而不是 " ,问题就解决了,但我想了解是否有聪明的方法保持双引号。

首先我建议使用单引号 - 它们更快 :D

主要问题是彼此使用相同的引号。这样做会导致过早关闭,我相信你想避免这种过早的尴尬。

简单的看:

"string has star"ted"

如您所见,文件到达的第一个双引号是星号之后的那个。这将关闭星号后的字符串,从而导致 ted" 出现致命错误。

您要做的是转义与开头引号冲突的引号。双引号内的单引号可以,反之亦然。

转义单引号内的单引号和双引号内的双引号 - 其余的应该可以离开。此外,我建议为您的 mysql 表和字段使用反引号,以避免在他们决定添加一些恰好与您的 table/field 名称

匹配的新关键字时出现一些错误

例如

如果使用单引号:

$conn->prepare('SELECT * FROM table WHERE string_field = \'value\'');

如果使用双引号:

$conn->prepare("SELECT * FROM table WHERE string_field = \"value\"");

如果混合:

$conn->prepare('SELECT * FROM table WHERE string_field = "value"');

\ 是用于这种情况的转义字符:)

替代方法是连接字符串:

$conn->prepare('SELECT * FROM table WHERE field = '. $foo);

因此将其分解,您声明字符串与往常一样带有首选引号,然后向其添加内容,您使用 . 连接