查询不适用于 SQL 模板字符串 npm
Query not working with SQL Template Strings npm
我正在尝试使用 sql 模板字符串 npm 包在我的 SQL 查询中安全地使用模板文字,但我不断收到一个错误,指出sql 语法。当我省略 "SQL" 位时,一切正常。我已经安装了 sql-template-strings 包。我错过了什么?感谢帮助!
// 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
行的“'reading'”附近使用的正确语法
读书是table的名字。
Console.logging queryString 呈现:
$ SQL语句{ 字符串:[ 'SELECT * FROM ', '' ], 值:[ 'reading' ] }
以及省略 SQL 关键字的日志:
$ SELECT * 来自阅读
我通读了所有文档 here。
当您使用 sql-template-strings
时,插入到查询中的值将作为参数传递给查询,而不是直接插入到查询中。但是 table 查询中的名称必须静态声明,它们不能作为参数传递。这就是您的查询失败的原因。要使其工作,请将 table 名称直接插入查询字符串,而不是使用 SQL 模板字符串插值。
var queryString = 'SELECT * FROM ' + table;
connection.query(queryString, (err, result) => {
if(err) throw err;
return cb(result);
})
这样做的一个重要后果是直接将内容附加到您的 SQL 查询中 非常危险 如果您不是确定变量实际包含的内容,因此始终确保 table
实际上是一个有效的 table 名称,并且 never 如果变量包含用户输入,则执行此操作。
有一种方法可以通过使用 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);
})
我正在尝试使用 sql 模板字符串 npm 包在我的 SQL 查询中安全地使用模板文字,但我不断收到一个错误,指出sql 语法。当我省略 "SQL" 位时,一切正常。我已经安装了 sql-template-strings 包。我错过了什么?感谢帮助!
// 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
行的“'reading'”附近使用的正确语法读书是table的名字。
Console.logging queryString 呈现:
$ SQL语句{ 字符串:[ 'SELECT * FROM ', '' ], 值:[ 'reading' ] }
以及省略 SQL 关键字的日志:
$ SELECT * 来自阅读
我通读了所有文档 here。
当您使用 sql-template-strings
时,插入到查询中的值将作为参数传递给查询,而不是直接插入到查询中。但是 table 查询中的名称必须静态声明,它们不能作为参数传递。这就是您的查询失败的原因。要使其工作,请将 table 名称直接插入查询字符串,而不是使用 SQL 模板字符串插值。
var queryString = 'SELECT * FROM ' + table;
connection.query(queryString, (err, result) => {
if(err) throw err;
return cb(result);
})
这样做的一个重要后果是直接将内容附加到您的 SQL 查询中 非常危险 如果您不是确定变量实际包含的内容,因此始终确保 table
实际上是一个有效的 table 名称,并且 never 如果变量包含用户输入,则执行此操作。
有一种方法可以通过使用 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);
})