我正在使用nodejs 10.26+ express 3.5+ node-mysql 2.1.1+
MySQL-Server Version: 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');
});
Run Code Online (Sandbox Code Playgroud)
它抛出此错误:
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
Run Code Online (Sandbox Code Playgroud)
但是如果我在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');
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
感谢帮助!
maj*_*rif 128
我猜你使用的是node-mysql.(但也应该适用于node-mysql2)
该文件说:
出于安全原因,禁用对多个语句的支持(如果未正确转义值,则允许SQL注入攻击).
要使用此功能,您必须为连接启用它:
var connection = mysql.createConnection({multipleStatements: true});
Run Code Online (Sandbox Code Playgroud)
启用后,您可以通过用分号分隔每个语句来执行多个语句的查询;.结果将是每个语句的数组.
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}]
});
Run Code Online (Sandbox Code Playgroud)
所以,如果你启用了multipleStatements,你的第一个代码应该可行.
小智 8
使用如下所示的“multiplestatements: true”对我有用
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: '',
multipleStatements: true
});
connection.connect();
var sql = "CREATE TABLE test(id INT DEFAULT 1, name VARCHAR(50));ALTER TABLE test ADD age VARCHAR(10);";
connection.query(sql, function(error, results, fields) {
if (error) {
throw error;
}
});
Run Code Online (Sandbox Code Playgroud)