У меня есть функция запроса MySQL с помощью Prisma в Express.js, и в настоящее время я столкнулся с одной проблемой. Вот функция:
console.info('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_menu' at line 1`","target":"$executeRaw"}
Когда я пытаюсь использовать статическое имя, это работает. Например, app_menu_20240321.
Я был бы признателен за любую помощь в этом. Спасибо.






$executeRaw не поддерживает использование переменных шаблона (документация).
Однако у вас есть возможность использовать $executeRawUnsafe:
const roleMenu = await prisma.$transaction([
prisma.$executeRawUnsafe`CREATE TABLE IF NOT EXISTS ${tableName} LIKE app_menu;`,
// other statements
]);
См. документацию здесь: https://www.prisma.io/docs/orm/prisma-client/queries/raw-database-access/raw-queries#executerawunsafe
Как всегда, применяется предупреждение об атаках с внедрением SQL и использовании необработанного пользовательского ввода в любом операторе SQL. Но если вы сами формируете имя таблицы, все будет в порядке.