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语法。