我正在使用nodejs 10.26
+ express 3.5
+ node-mysql 2.1.1
+
MySQL-Server Version: 5.6.16
。
我有4个DELETE,并且只需要1个数据库请求,所以我将DELETE命令与&#34 ;;" ...连接起来......但它总是失败。
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
但是,如果我在PhpMyAdmin中粘贴此SQL,它总是成功的......
如果我在单个查询中写出它也会成功。
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');
});
});
});
});
感谢您的帮助!
答案 0 :(得分:107)
我猜你正在使用node-mysql。 (但也适用于node-mysql2 )
docs说:
出于安全原因,禁用对多个语句的支持(它 如果没有正确转义值,则允许SQL注入攻击。)
要使用此功能,您必须为连接启用它:
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
,那么您的第一个代码应该有效。