gpt4 book ai didi

mysql - node-mysql 一个查询中的多个语句

转载 作者:行者123 更新时间:2023-11-29 16:28:39 24 4
gpt4 key购买 nike

我正在使用nodejs 10.26 + express 3.5 + node-mysql 2.1.1 +MySQL 服务器版本:5.6.16

我有 4 个 DELETE,但只需要 1 个数据库请求,因此我用“;”连接 DELETE 命令...但它总是失败。

var sql_string = "DELETE FROM user_tables WHERE name = 'Testbase';";
sql_string += "DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase';";
sql_string += "DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase';";

connection.query(sql_string, function(err, rows, fields) {
if (err) throw err;
res.send('true');
});

它抛出此错误:

Error: ER_PARSE_ERROR: 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 'DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase';DELETE FR' at line 1

但是如果我将此 SQL 粘贴到 PhpMyAdmin 中,它总是成功的...

如果我将其写在单个查询中,它也会成功。

        connection.query("DELETE FROM user_tables WHERE name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;

connection.query("DELETE FROM user_tables_structure WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;


connection.query("DELETE FROM user_tables_rules WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;

connection.query("DELETE FROM user_tables_columns WHERE parent_table_name = 'Testbase'", function(err, rows, fields) {
if (err) throw err;

res.send('true');
});
});
});
});

感谢您的帮助!

最佳答案

我猜你正在使用node-mysql 。 (但也应该适用于 node-mysql2 )

docs说:

Support for multiple statements is disabled for security reasons (it allows for SQL injection attacks if values are not properly escaped).

多语句查询

要使用此功能,您必须为您的连接启用它:

var connection = mysql.createConnection({multipleStatements: true});

启用后,您可以使用多个语句执行查询,方法是用分号 ; 分隔每个语句。结果将是每个语句的一个数组。

示例

connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
if (err) throw err;

// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}]
console.log(results[1]); // [{2: 2}]
});

因此,如果您启用了multipleStatements,您的第一个代码应该可以工作。

关于mysql - node-mysql 一个查询中的多个语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54077240/

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