LIKE子句问题

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

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

我遇到的问题是JavaScript中的variables有单引号围绕它们的值。 所以我得到以下几点:

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

实际的string我这样build设:

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

封闭的内容是由escape函数自动添加的,所以将% s移动到variables内部并将其转义,并从查询中移除:

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

参考 – 转义查询值

或者,您应该也可以使用模拟的准备语句语法:

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

这将执行类似的sprintf ,取代? 由第二个参数数组正确转义的项目(内部使用与上面相同的escape方法)的占位符按照它们传递的顺序 – 占位符的顺序对应于数组项目的顺序。


注意:我假设你已经简化了从SELECT语句中删除所有字段的查询,请记住至lessselect一个字段或全部( * ),否则它不是有效的SQL语法。