LIKE子句问题

时间:2013-05-08 01:42:01

标签: javascript mysql sql node.js

我正在开发一个小型移动网络应用。我有一个具有LIKE子句的查询。例如:

SELECT from posts WHERE (title LIKE '%car%') or (content LIKE '%car%');

我遇到的问题是javascript中的变量在其值周围有单引号。所以我得到以下内容:

SELECT from posts WHERE (title LIKE '%'car'%') or (content LIKE '%'car'%');

实际字符串我正在以这种方式构建:

"SELECT from posts WHERE (title LIKE '%" + client.escape(input) + "%') or (content LIKE '%" + client.escape(input) + "%');"

1 个答案:

答案 0 :(得分:1)

封闭的'由escape函数自动添加,因此将%移到变量内部并将其转义,然后从查询中删除':< / p>

input = client.escape('%' + input + '%'); //=== "'%escaped_input%'"
client.query("SELECT * FROM posts WHERE (title LIKE " + input + ") or (content LIKE " + input + ")", function(err, results) {
     // ...
});

Reference - Escaping query values

或者,您也应该能够使用模拟的预准备语句语法:

input = '%' + input + '%';
client.query("SELECT * FROM posts WHERE (title LIKE ?) or (content LIKE ?)", [input, input], function(err, results) {
     // ...
});

这将执行类似于sprintf的操作,将第二个参数数组中的?占位符替换为正确转义的项(内部使用与上面相同的escape方法),顺序它们被传递 - 占位符的顺序对应于数组项的顺序。


旁注:我假设您过度简化了查询,删除了SELECT语句中的所有字段,请记住至少选择一个字段或全部字段(*),否则它无效SQL语法。