[英]How to insert multiple mysql queries using node.js?
我正在尝试构建一个应用程序,用户可以在其中注册/登录并保存他最喜欢的电影。 这是数据库
这是我使用 MySQL 的第一个项目,我发现一开始很难插入/获取数据以进行身份验证,但我设法做到了。
现在我正在尝试创建一个用户可以插入电影的表单,但我不知道该怎么做,因为我认为我需要对以下内容进行多个插入查询:电影导演、user_movies...
我试过的:
app.post("/add", (req, res) => {
const userId = req.body.userId;
const title = req.body.title;
const year = req.body.year;
const image_url = req.body.image_url;
const runtime = req.body.runtime;
const rating = req.body.rating;
const director = req.body.director;
const genre = req.body.genre;
const description = req.body.description;
db.query('insert into movies (title, year,image_url,runtime, rating, description)values(?, ?,?,?,?,?)',
[title, year, image_url, runtime, rating, description], (err, result) => {
console.log(err);
res.send(result);
}
)
db.query('insert into directors (name) values(?)',
[director], (err, result) => {
console.log(err);
res.send(result);
});
db.query('insert into genres (name) values(?)',
[genre], (err, result) => {
console.log(err);
res.send(result);
});
});
})
@Luuk 提供了一种使用存储过程解决此问题的好方法。 例如,当您需要将insert_1
新创建的值用于insert_2
,这会很有帮助且有效。
在您的问题中,您似乎已经拥有查询所需的所有数据。
如果您想完全在您的Node
应用程序中完成此操作而不使用存储过程,您可以通过启用multipleStatements
配置选项来实现。
下面包含一个基于您的示例代码的示例。 在connection
配置的第一行中,您将看到multipleStatements: true
的定义位置。
const mysql = require('mysql');
const connection = mysql.createPool({
multipleStatements: true, // required for multiple statements
connectionLimit: 10,
host: process.env.DB_HOST || '127.0.0.1',
user: process.env.DB_USER || 'local_user',
password: process.env.DB_PASSWORD || 'local_password',
database: process.env.DB_NAME || 'local_database',
charset: 'utf8mb4' // necessary if you might need support for emoji characters
});
const db = connection;
app.post("/add", (req, res) => {
let userId = req.body.userId;
let title = req.body.title;
let year = req.body.year;
let image_url = req.body.image_url;
let runtime = req.body.runtime;
let rating = req.body.rating;
let director = req.body.director;
let genre = req.body.genre;
let description = req.body.description;
let query_1 = `INSERT INTO movies (title, year, image_url, runtime, rating, description) VALUES (?, ?, ?, ?, ?, ?); `;
let query_2 = `INSERT INTO directors (name) VALUES (?); `;
let query_3 = `INSERT INTO genres (name) VALUES (?);`;
db.query(
query_1 + query_2 + query_3,
[title, year, image_url, runtime, rating, description, director, genre],
(err, results, fields) => {
if (error) throw error;
// results is an array with one element for every statement in the query:
console.log(results[0]); // query_1 results
console.log(results[1]); // query_2 results
console.log(results[2]); // query_3 results
res.send({all_result: results});
});
}
);
请注意,支持多个语句会增加安全风险,例如 SQL 注入攻击。 始终努力确保正确转义值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.