首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用SQL模板字符串npm的查询

不使用SQL模板字符串npm的查询
EN

Stack Overflow用户
提问于 2019-10-24 20:53:14
回答 2查看 2.9K关注 0票数 1

我试图在sql查询中安全地使用SQL模板字符串npm包来使用模板文本,但我一直收到一个错误,该错误声明sql语法存在问题。当我省略"SQL“位时,一切都正常。我已经安装了sql-模板-字符串包。我遗漏了什么?帮助感激!

代码语言:javascript
复制
// Import MySQL connection.
const connection = require("../config/connection.js");
let SQL = require('sql-template-strings');
//SQL queries
let 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 {string:'SELECT * FROM ','‘,值:'reading’}

以及忽略SQL关键字的日志:

$ SELECT *从阅读

我阅读了所有的文档这里

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-26 22:55:50

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

代码语言:javascript
复制
    var queryString = 'SELECT * FROM ' + table;    
    connection.query(queryString, (err, result) => {
        if(err) throw err;
        return cb(result);
    })

这样做的一个重要后果是,如果您不确定变量实际持有什么,那么直接将内容添加到SQL查询中的结果是极其危险的,所以始终要确保table实际上是一个有效的表名,如果变量包含用户输入,则从不使用

票数 0
EN

Stack Overflow用户

发布于 2021-04-24 21:28:47

有一种使用append()对模板字符串库执行此操作的方法。

代码语言:javascript
复制
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);
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58549003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档