我正在开发一个小型移动网络应用程序。我有一个包含 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) + "%');"
最佳答案
封闭的 '
由转义函数自动添加,因此将 %
移到变量内部并转义它,并删除 '
来自您的查询:
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 语法。
关于javascript - LIKE 子句问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16431326/