Node.js MySQL WHERE占位符,带有通配符错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js MySQL WHERE占位符,带有通配符错误相关的知识,希望对你有一定的参考价值。
我在从mysql移走此行时遇到麻烦
SELECT * FROM table WHERE columnName LIKE '?%'
到我在node.js中的方法
getName(request, respond){
var columnName = request.params.columnName;
var sql = "SELECT * FROM table WHERE columnName LIKE '?%'";
db.query(sql, columnName, function(error, result){
if(error){
throw error;
}
else{
respond.json(result);
}
});
}
LIKE'?%'的正确语法是什么非常感谢!
答案
这个问题可能已经在Stack Overflow的各个地方得到了回答,但是经过短暂搜索之后,我找不到带有mysql和node.js特定组合的一个,所以去了:
您在使用查询参数时走在正确的轨道上,但是以下操作将不起作用,因为参数占位符不能位于SQL字符串文字内。否则,您将如何使用实际的“?” SQL字符串中的字符?
var sql = "SELECT * FROM table WHERE columnName LIKE '?%'";
即使参数用于字符串或日期值,也只能在字符串定界符之外使用参数占位符。
您的选项是将参数与SQL表达式中的文字'%'
合并起来,例如@ tcadidot0的答案:
var sql = "SELECT * FROM table WHERE columnName LIKE CONCAT(?, '%')";
或者,也可以将通配符连接到Node.js代码中的输入字符串,并将连接的值视为单个字符串:
var columnNamePattern = request.params.columnName + "%";
var sql = "SELECT * FROM table WHERE columnName LIKE ?";
db.query(sql, columnNamePattern, function(error, result){
请避免将Node.js变量连接到SQL查询中。这将创建一个SQL注入漏洞。
不安全:
var sql = "SELECT * FROM table WHERE columnName LIKE '" + columnName + "%'";
以不安全的方式编写代码也更加困难。很难找到不匹配的引号,编写代码需要更长的时间,也很难调试。
另一答案
您可以将LIKE '?%'
更改为LIKE CONCAT(?,'%')
;
getName(request, respond){
var columnName = request.params.columnName;
var sql = "SELECT * FROM table WHERE columnName LIKE CONCAT(?,'%')";
db.query(sql, columnName, function(error, result){
if(error){
throw error;
}
else{
respond.json(result);
}
});
}
以上是关于Node.js MySQL WHERE占位符,带有通配符错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 Node.JS 的 MongoDB:$where 子句性能
Node.js mysql 查询语法问题 UPDATE WHERE