我在 Express.js 中有一个使用 Prisma 查询 MySQL 的功能,目前我遇到了一个问题。这是函数:
console.log('Operation successfully.');
return roleMenu;
} catch (error) {
console.error('Error occurred:', error);
throw error;
}
};
问题在于 currentDate 似乎被解释为参数,或者 Prisma 不接受其格式。 vscode终端的错误是:
[2024-03-21 15:37:10] error: {"timestamp":"2024-03-21T08:37:10.512Z","message":"\nInvalid `prisma.$executeRaw()` invocation:\n\n\nRaw query failed. Code: `1064`. Message: `You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? LIKE app_role_menu' at line 1`","target":"$executeRaw"}
当我尝试使用静态名称时,它有效。例如,app_role_menu_20240321。
如果有任何帮助,我将不胜感激。谢谢你。
$executeRaw
不支持使用模板变量(文档)。
但是,您可以选择使用
$executeRawUnsafe
:
const roleMenu = await dscClient.$transaction([
dscClient.$executeRawUnsafe`CREATE TABLE IF NOT EXISTS ${tableName} LIKE app_role_menu;`,
// other statements
]);
一如既往,针对 SQL 注入攻击的警告以及在任何 SQL 语句中使用原始用户输入均适用。但如果您自己创建表名称,那么就可以开始了。