Node -mysql несколько операторов в одном запросе
Я использую 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');
});
Он выдает эту ошибку:
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');
});
});
});
});
Спасибо за помощь!
Ответы
Ответ 1
Я предполагаю, что вы используете node-mysql. 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
, ваш первый код должен работать.