我使用相同的Prisma客户机变量在一个序列中执行几个INSERT和UPDATE统计信息,所有这些都 Package 在一个TRY CATCH中。
在捕获过程中,我希望将错误记录到数据库中,但我得到了错误:
无效的prisma.$executeRaw()
调用:原始查询失败。代码:N/A
。消息:N/A
下面是我的代码:
let prisma = await new PrismaClient({
datasources: {
db: {
url: dbUrl,
},
},
});
try {
await prisma.$executeRaw`
INSERT INTO table1(col1, col2)
VALUES (val1, cal2);`;
await prisma.$executeRaw`
INSERT INTO table2(col1, col2)
VALUES (val1, cal2);`;
} catch (err: any) {
console.log('Error doing and sql insert: ' + err);
// Update the log item in the db with the error.
try {
console.log('getting ready to log sql error')
// We can't use the prisma variable above becuase it probably died when we got the error
// so create a new prisma variable here.
// The exception is on the next line.
let prisma2 = await new PrismaClient({
datasources: {
db: {
url: dbUrl,
},
},
});
await prisma2.$executeRaw`
UPDATE FisImportLog
SET Success = 0, Message = 'Error at: ${msg}. ' + ${err}
WHERE FisImportLogGUID = ${logId};`;
} catch (err: any) {
console.log('FIS Import *Log* Error Message: ' + err);
// This was really bad!!!
// Call notification service here
}
}
谁能告诉我为什么会出现这个错误,以及如何使用PRISMA将PRISMA错误记录到数据库中?
谢谢。
1条答案
按热度按时间rdrgkggo1#
我发现这个问题要归功于@Shea Hunter Belsky的评论
我正在记录来自打字脚本try/Catch的错误消息,错误中有很多单引号,这完全破坏了用于插入错误消息的动态SQL。我用扁虱代替了它们,然后所有的都起作用了。
但要做到这一点,我必须使用Prisma.$ecuteRawUnsafe,而不是具有如下字符串模板的prisma2.$ecuteRaw:
注意:我还必须在WHERE子句中使用单引号将ID括起来,而在字符串模板中则不需要。