Mysql 无法在knex node express中将multipleStatements设置为true
我继承了一个用于RESTFUL api的node.js应用程序,它使用knex池连接到mysql。我需要在单个函数(语句)中执行多个查询,据我所知,为此我需要在knex池设置中将MultipleStatement设置为truu。我已经做到了: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
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);
}