如何使用 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 中批量插入

如何使用node.js在mySQL中插入数组[重复]

如何使用 Node.js 从 Angular 将日期插入 MySQL DATETIME 列?

如何在node.js中将json数组数据插入mysql?

Node的数据库编程(MySQL),增删改查