我正在使用
nodejs 10.26
+ express 3.5
+ node-mysql 2.1.1
+ MySQL-Server Version: 5.6.16
。
我有四个 DELETE,但只需要一个数据库请求,因此我用“;”连接 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)
文档说:
出于安全原因禁用对多个语句的支持(它 如果值没有正确转义,则允许 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
,您的第一个代码应该可以工作。
使用如下所示的“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;
}
});
这在 Next.js 中对我有用...
export default async function handler(req, res) {
try {
// Build your multiple MySQL queries here
const querySql = "DELETE FROM favorites WHERE user = ? AND listingID= ?";
const querySql2 = "UPDATE properties SET saves = ? WHERE listingid = ?";
// Pass any params here
const valuesParams = [user, listingID];
const valuesParams2 = [upDateSaves, listingID];
//Execute your multiple MySQL queries here
const data = await query({query: querySql, values: valuesParams });
const data2 = await query({query: querySql2, values: valuesParams2 });
//Combine the results
const combinedResults = [data, data2];
res.status(200).json({
text: combinedResults,
});
} catch (error) {
res.status(500).json({ error: 'Error fetching data' });
}
}
要从数据库(SQL)获取数据,以下函数可以准确工作
router.get('/', function messageFunction(req, res){ //res.send('嗨,亲爱的拉西克,欢迎来到测试页。') //=> 一种方法 dbConn.query('SELECT COUNT(name) 作为计数,姓名、姓氏、电话、来自学生的电子邮件', function (err, rows, fields) { // 另一种方式 如果(错误)抛出错误
dbConn.query('SELECT name, author from books',
function (err, rowsBook, fields) { // another Way
if (err) throw err
// console.log('The counted is: ', rows[0].counted); //=> Display in console
// res.send('Hi Dear Rasikh, Welcome to Test Page.'+ rows[0].counted) //=> Display in blank page
res.render('main/index',{data:rows, myData:rowsBook});
})
}); });