Mysql 无法在knex node express中将multipleStatements设置为true

Mysql 无法在knex node express中将multipleStatements设置为true,mysql,node.js,express,knex.js,pooling,Mysql,Node.js,Express,Knex.js,Pooling,我继承了一个用于RESTFUL api的node.js应用程序,它使用knex池连接到mysql。我需要在单个函数(语句)中执行多个查询,据我所知,为此我需要在knex池设置中将MultipleStatement设置为truu。我已经做到了: const connection = (user, password) => knex({ client: "mysql", connection: { multipleStatement

我继承了一个用于RESTFUL api的node.js应用程序,它使用knex池连接到mysql。我需要在单个函数(语句)中执行多个查询,据我所知,为此我需要在knex池设置中将MultipleStatement设置为truu。我已经做到了:

    const connection = (user, password) =>
      knex({
       client: "mysql",
       connection: {
       multipleStatements: true,
       host: process.env.MYSQL_IP,
       port: process.env.MYSQL_PORT,
       user,
       password,
       database: "",
       dateStrings: true,
          }
});
但是,这似乎没有得到应用,我无法在一个查询中执行多个语句(根据mysql池中的文档):

如果我检查我的客户机,我看到multiplestatement仍然被设置为false:

    Pool {
  _events: {},
  _eventsCount: 0,
  _maxListeners: undefined,
  config:
   PoolConfig {
     acquireTimeout: 10000,
     connectionConfig:
      ConnectionConfig {
        host: 'xxx.xxx.xxx.xxx',
        port: 'xxxx',
        localAddress: undefined,
        socketPath: undefined,
        user: 'xxxxxxx',
        password: 'xxxxxxx',
        database: 'xxxxxxxxx',
        connectTimeout: 10000,
        insecureAuth: false,
        supportBigNumbers: false,
        bigNumberStrings: false,
        dateStrings: false,
        debug: undefined,
        trace: true,
        stringifyObjects: false,
        timezone: 'local',
        flags: '',
        queryFormat: undefined,
        pool: [Circular],
        ssl: false,
        multipleStatements: false,
        typeCast: true,
        maxPacketSize: 0,
        charsetNumber: 33,
        clientFlags: 455631 },
     waitForConnections: true,

因此,我的问题是--是否还有其他地方可以更改此设置(快速会话或???),或者是否有人有一些想法?

我在中找不到
多个状态:true
相关设置

但据此,

也许您可以在一个查询字符串中手动连接多个语句,如:

const queries = [
   knex.table("game0.stats").update(updateCurrency),
   knex.table("game1.stats").update(updateCurrency),
   knex.table("game2.stats").update(updateCurrency),
];
const multiQuery = queries.join(";");
console.log(multiQuery);
return knex.raw(multiQuery)
   .then((result) => {
   })
   .catch((error) => {
   });
此外,您可以在执行查询之前包装函数:

function executeMultiStatements(queries) {
  // do some checks
  // avoid sql injection
  // ...
  const multiQuery = queries.join(';')
  return knex.raw(multiQuery);
}

multipleStatements
配置是驱动程序选项。Knex将所有驱动程序选项传递给
mysql
驱动程序。这是驱动程序的文档-此注释还解释了它可以与
knex.raw
-
function executeMultiStatements(queries) {
  // do some checks
  // avoid sql injection
  // ...
  const multiQuery = queries.join(';')
  return knex.raw(multiQuery);
}