我目前正在使用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");
根据此示例查询,正确的引号语法应该是什么?如果我在准备查询时使用' 而不是" ,则问题已得到解决,但我想了解是否有智能方法保持双引号。
答案 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);
如此分解,你声明字符串与通常的首选引号相同,然后向其中添加内容,使用.
连续