为了账号安全,请及时绑定邮箱和手机立即绑定

查询不适用于 SQL 模板字符串 npm

查询不适用于 SQL 模板字符串 npm

沧海一幻觉 2021-12-02 17:04:39
我正在尝试使用 sql 模板字符串 npm 包在我的 SQL 查询中安全地使用模板文字,但我不断收到一个错误,指出 sql 语法有问题。当我省略“SQL”位时,一切正常。我已经安装了 sql-template-strings 包。我错过了什么?帮助表示赞赏!// Import MySQL connection.const connection = require("../config/connection.js");let SQL = require('sql-template-strings');//SQL querieslet orm = {        all: (table, cb) => {        var queryString = SQL`SELECT * FROM ${table}`;            connection.query(queryString, (err, result) => {            if(err) throw err;            return cb(result);        })    }      };module.exports = orm;我得到的错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行的“阅读”附近使用的正确语法读数是表的名称。Console.logging queryString 呈现:$ SQLStatement { 字符串: [ 'SELECT * FROM ', '' ], values: [ 'reading' ] }以及省略 SQL 关键字的日志:$ SELECT * FROM 阅读我通读了这里的所有文档。
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

使用 时sql-template-strings,插入到查询中的值将作为参数传递给查询,而不是直接插入到查询中。但是查询中的表名必须静态声明,它们不能作为参数传递。这就是您的查询失败的原因。要使其工作,请将表名直接插入查询字符串中,而不是使用 SQL 模板字符串插值。


    var queryString = 'SELECT * FROM ' + table;    

    connection.query(queryString, (err, result) => {

        if(err) throw err;

        return cb(result);

    })

这样做的一个重要后果是,如果您不确定变量实际保存的内容,将内容直接附加到 SQL 查询中是非常危险的,因此请始终确保它table实际上是一个有效的表名,如果变量包含用户,则永远不要这样做输入。


查看完整回答
反对 回复 2021-12-02
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

有一种方法可以通过使用模板字符串库来做到这一点append():


let queryString = SQL`SELECT * FROM `;

queryString.append(table); //put variable names into append


connection.query(queryString, (err, result) => {

  if(err) throw err;

  return cb(result);

})


查看完整回答
反对 回复 2021-12-02
  • 2 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信