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

带有百分比的图像占位符?

为啥 PDO 不允许具有相同名称的多个占位符?

Node.JS 仅返回 MySQL“WHERE IN”子句的部分记录

如何使用 Flare 动画作为带有淡入动画的图像占位符