如何使用 node.js 插入多个 mysql 查询?
Posted
技术标签:
【中文标题】如何使用 node.js 插入多个 mysql 查询?【英文标题】:How to insert multiple mysql queries using node.js? 【发布时间】:2021-06-30 18:54:21 【问题描述】:我正在尝试构建一个应用程序,用户可以在其中注册/登录并保存他最喜欢的电影。 这是数据库
这是我使用 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);
);
);
)
【问题讨论】:
您可以使用存储过程,请参阅Using Mysql to do multiple INSERT on linked tables。优点是您可以将所有 SQL 内容放在一个地方。 谢谢你,@Luuk!这就是我需要的!发布它,以便我可以接受它作为解决方案。 你最好把票投给回答我指示你去的问题的人..... 【参考方案1】:@Luuk 提供了一种使用存储过程来解决此问题的好方法。例如,当您需要在 insert_2
中使用来自 insert_1
的新创建值时,这会非常有用且高效。
在您的问题中,您似乎已经拥有查询所需的所有数据。
如果您想完全在您的 Node
应用程序中完成此操作而不使用存储过程,you can do so by enabling the multipleStatements
config option。
下面包含一个基于您的示例代码的示例。在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 注入攻击。始终努力确保正确转义值。
【讨论】:
谢谢,这样更好!以上是关于如何使用 node.js 插入多个 mysql 查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 node.js 中使用 sqlite3 执行批量插入?
如何使用 mysljs 在 mySql 和 node.js 中批量插入