javascript - LIKE 子句问题

标签 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) + "%');"

最佳答案

封闭的 ' 由转义函数自动添加,因此将 % 移到变量内部并转义它,并删除 ' 来自您的查询:

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/

相关文章:

sql - 为基于数组的列中的每个值多次返回同一行

SQL 使用不同条件两次使用相同字段

mysql - 从Shell界面将数据加载到mysql数据库中

php - 使用 PHP 将调查插入 SQL 数据库

javascript - Angular 6 中的自定义单选按钮选择错误(在 ngFor 内部)

javascript - 如果禁用了 javascript,如何隐藏未被 <noscript> 标记包围的某些 html?

mysql - Rails 列名冲突

用于查找接下来四天避开周日的时段的 SQL 查询

javascript - "This"正在返回 [object Window],而不是元素

javascript - 更新到 nextjs@10.4 后找不到模块 'webpack/lib/node/NodeTemplatePlugin'