【问题标题】:pass multiple query in query() function in nodejs在nodejs的query()函数中传递多个查询
【发布时间】:2021-07-27 11:50:09
【问题描述】:
In this only first query will run how I pass 2 query simultaneously .

我想同时运行插入或更新查询。
db.js

require('dotenv').config()
const mysql = require('mysql');


const db_config = {
    connectionLimit: 10,
    host: "localhost",
    user: "root",
    password: "",
    database: "vechain"
};

const pool = mysql.createPool(db_config);
exports.pool = pool;
exports.query = function(query) {
    try {
        return new Promise((resolve, reject) => {
            pool.query(query, function(err, result, fields) {
                if (err) reject(err);
                resolve(result);
            });
        })
    } catch (err) {
        console.log('in db_sql function error');
        console.log(err);
        res.status(500).send({ success: false, msg: 'Error', data: '', errors: err });
    }
}

**app.js**

const db = require('./db'); //here I inclue database details

//这是我的查询 var check = await db.query('insert into test (name) Select "kk" where not exists(select * from test where name="kmkm" )';'更新测试集 name = "88" where id = "463 "');

【问题讨论】:

  • 你为 db 对象使用了什么库?
  • db 只是一个连接值
  • 那你如何启动 db 对象呢?你能告诉我们吗?
  • var db= mysql.createConnection({ host: "localhost", user: "root_new", password: "pas", database: "database" });
  • 对不起,请告诉我们query1 和query2 是什么。我不完全明白你想在 SQL 中做什么?

标签: mysql sql node.js


【解决方案1】:

从doc,您可以传递两个查询。

我在配置中添加了一个选项multipleStatements: true,。

另外,我使用...args 将多个查询传递给query 函数。

从文档中,请注意,流式传输多语句查询的接口是实验性的

例子:

require("dotenv").config();
const mysql = require("mysql");

const db_config = {
  connectionLimit: 10,
  host: "localhost",
  user: "root",
  password: "",
  database: "vechain",
  multipleStatements: true,
};

const pool = mysql.createPool(db_config);
exports.pool = pool;
exports.query = function (...args) {
  try {
    const query = args.join(";");
    console.log({ query });
    return new Promise((resolve, reject) => {
      pool.query(query, function (err, result, fields) {
        if (err) reject(err);
        resolve(result);
      });
    });
  } catch (err) {
    console.log("in db_sql function error");
    console.log(err);
    res
      .status(500)
      .send({ success: false, msg: "Error", data: "", errors: err });
  }
};

你的 app.js

const db = require("./db"); //here I include database details

const query1 = "SELECT 1";
const query2 = "SELECT 2";

db.query(query1, query2).then(res => {
  console.log(res);
});

【讨论】:

  • var check = await db.query('insert into test (name) Select "kk" where not exists(select * from test where name="kmkm" ) ; update test set name = "88 " 其中 id = "463"');当我使用这个然后得到 sql 语法错误
  • @Tarannum,我更新了我的答案。请检查您是否有任何错误。如果是,请提供错误。
  • 这是我的错误 UnhandledPromiseRejectionWarning: E​​rror: ER_PARSE_ERROR: You have an error in your SQL syntax;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“更新测试集名称 =“88”其中 id =“463”附近使用正确的语法@ikhvjs
  • var check = await db.query(${'insert into test ( name) Select "kk" where not exists(select * from test where name="kmkm" )'} ;${ 'update test set name = "88" where id = "463"'});
  • @Tarannum,能否请您从我的答案中复制整个脚本以运行?包括const query1= .....
【解决方案2】:

试试看;

var check = db.query(query1,query2);

【讨论】:

  • 为了改进您的答案并帮助 OP,请添加解释为什么这会起作用。就目前而言,您回答的简洁性使其有责任删除。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 2020-10-17
相关资源
最近更新 更多