如何在 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);
因此将其分解,您声明字符串与往常一样带有首选引号,然后向其添加内容,您使用 .
连接
我目前正在使用 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);
因此将其分解,您声明字符串与往常一样带有首选引号,然后向其添加内容,您使用 .
连接