如何正确格式化mysql查询中的引号和双引号

时间:2017-06-15 15:15:34

标签: mysql pdo group-concat double-quotes

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

当我遇到这样的案件时:

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

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

这里有一个奇怪的例子(忘记了mysql ......这是非常无关紧要,专注于引用情况),在嵌套的SELECT中有引号和双引号:

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

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

1 个答案:

答案 0 :(得分:1)

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

主要问题是彼此使用相同的引号。这样做会导致过早结束,我相信你想要保存这种过早的尴尬。

简单来说:

"string has star"ted"

正如您所看到的,文件获得的第一个双引号是明星之后。这将关闭星形后的字符串,使ted"处于致命错误中。

您要做的是逃避与开头报价冲突的报价。双引号内的单引号很好,反之亦然。

单引号内的单引号和双引号内的双引号 - 其余应该可以离开。另外,我建议你的mysql表和字段使用反引号来避免一些错误,如果他们想要添加一些恰好匹配你的表/字段名称的新关键字

e.g。

如果使用单引号:

$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);

如此分解,你声明字符串与通常的首选引号相同,然后向其中添加内容,使用.连续