我试图在sql查询中安全地使用SQL模板字符串npm包来使用模板文本,但我一直收到一个错误,该错误声明sql语法存在问题。当我省略"SQL“位时,一切都正常。我已经安装了sql-模板-字符串包。我遗漏了什么?帮助感激!
// 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 *从阅读
我阅读了所有的文档这里。
发布于 2020-03-26 22:55:50
使用sql-template-strings时,插入到查询中的值作为参数传递给查询,而不是直接插入到查询中。但是查询中的表名必须静态声明,它们不能作为参数传递。这就是您的查询失败的原因。要使其工作,可以直接将表名插入查询字符串,而不是使用SQL模板字符串内插。
var queryString = 'SELECT * FROM ' + table;
connection.query(queryString, (err, result) => {
if(err) throw err;
return cb(result);
})这样做的一个重要后果是,如果您不确定变量实际持有什么,那么直接将内容添加到SQL查询中的结果是极其危险的,所以始终要确保table实际上是一个有效的表名,如果变量包含用户输入,则从不使用。
发布于 2021-04-24 21:28:47
有一种使用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);
})https://stackoverflow.com/questions/58549003
复制相似问题