gpt4 book ai didi

mysql - Nodejs MySQL : Query-Escaping adds single quotes

转载 作者:行者123 更新时间:2023-11-29 09:38:01 26 4
gpt4 key购买 nike

我试图逃避我的 SQL 创建表查询。它向查询添加单引号,这会导致错误。

    let table = "SomeTable";
let query_table =
"CREATE TABLE IF NOT EXISTS ? (ID_Charge int AUTO_INCREMENT PRIMARY KEY, ID_Machine int, FOREIGN KEY (ID_Maschine) REFERENCES Machine (ID_Machine))";

con.query(query_table, `${table}_Users` (err) => {
(...)

我收到的错误是这样的:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''SomeTable_Users' (ID_Charge int AUTO_INCREMENT PRIMARY KEY, ID_Maschine int' at line 1",

如果表名称保留在单引号中,为什么会出现错误?

最佳答案

问题在于它被转义为“值”而不是“标识符”。根据您用来执行查询的包,您可以标记它应该转义为标识符。如果您使用 mysql 包,您可以执行以下操作:

let table = "SomeTable";
let query_table =
"CREATE TABLE IF NOT EXISTS ?? (ID_Charge int AUTO_INCREMENT PRIMARY KEY, ID_Machine int, FOREIGN KEY (ID_Maschine) REFERENCES Machine (ID_Machine))";

con.query(query_table, [`${table}_Users`], (err) => {
(...)

请注意,双?? 表示“这是一个标识符,而不是一个值”。

如果您使用@databases/mysql作为驱动程序,您可以执行以下操作:

con.query(sql`
CREATE TABLE IF NOT EXISTS ${sql.ident(`${table}_Users`)}
(
ID_Charge int AUTO_INCREMENT PRIMARY KEY,
ID_Machine int,
FOREIGN KEY (ID_Maschine) REFERENCES Machine (ID_Machine)
)`
);

参见https://www.atdatabases.org/docs/sql#sqlidentnames

注意根据您的库的使用方式,您可能还需要将允许的表名称列入白名单,例如:

if (!['table1', 'table2'].includes(table)) throw new Error('Invalid table name');

您可能还需要使用

`${table}_Users`.toLowerCase();

取决于数据库中区分大小写的配置方式。

关于mysql - Nodejs MySQL : Query-Escaping adds single quotes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57198894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com