使用 JavaScript 模板文字连接字符串时出现问题
Problem concatenating strings using JavaScript template literals
我正在使用 prisma.io 库,但在使用模板文字来执行我想要的操作时遇到了问题。可能是我理解不够。
我有这个电话:
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active = ${activeSetting}`
这完全符合我的要求。
但是,我想有选择地在末尾附加一个字符串,而不必重做完整的语句。
也就是说,我想要这样的东西:
let result;
if (orderBy === "ASC") {
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY ASC`
} else if {
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY DESC`
}
基本上,我不想必须完成以 const result = await
开头的语句。我意识到这是一个简短的例子,但我的问题是当我有相当长的 SQL 语句时,我发现自己做了很多剪切和粘贴巨大的 SQL 这很容易出错。
您可以像这样使用 ternary operator:
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY ${orderBy === 'ASC' ? 'ASC' : 'DESC'}`
但最好不要写原始的 SQL 字符串,因为这样会使自己容易受到 SQL Injection
的攻击
我意识到我可以做一个更大的 sql 语句以及连接更大的代码块,这会使问题更清楚。感谢@CertainPerformance 和@Phil 的想法。
这就是我真正想要的,它可以解决我更大的问题,同时还能保证我的安全,我很确定。
const orderByAsc = Prisma.sql`ORDER BY ASC`;
const orderByDesc = Prisma.sql`ORDER BY DESC`;
const result =
await prisma.$queryRaw`SELECT * FROM User WHERE active = ${activeSetting} ${
orderBy === 'ASC' ? orderByAsc : orderByDesc
}`;
如果需要的话,它还让我在子句中加入表达式。
我正在使用 prisma.io 库,但在使用模板文字来执行我想要的操作时遇到了问题。可能是我理解不够。
我有这个电话:
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active = ${activeSetting}`
这完全符合我的要求。
但是,我想有选择地在末尾附加一个字符串,而不必重做完整的语句。
也就是说,我想要这样的东西:
let result;
if (orderBy === "ASC") {
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY ASC`
} else if {
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY DESC`
}
基本上,我不想必须完成以 const result = await
开头的语句。我意识到这是一个简短的例子,但我的问题是当我有相当长的 SQL 语句时,我发现自己做了很多剪切和粘贴巨大的 SQL 这很容易出错。
您可以像这样使用 ternary operator:
const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
${activeSetting} ORDER BY ${orderBy === 'ASC' ? 'ASC' : 'DESC'}`
但最好不要写原始的 SQL 字符串,因为这样会使自己容易受到 SQL Injection
的攻击我意识到我可以做一个更大的 sql 语句以及连接更大的代码块,这会使问题更清楚。感谢@CertainPerformance 和@Phil 的想法。
这就是我真正想要的,它可以解决我更大的问题,同时还能保证我的安全,我很确定。
const orderByAsc = Prisma.sql`ORDER BY ASC`;
const orderByDesc = Prisma.sql`ORDER BY DESC`;
const result =
await prisma.$queryRaw`SELECT * FROM User WHERE active = ${activeSetting} ${
orderBy === 'ASC' ? orderByAsc : orderByDesc
}`;
如果需要的话,它还让我在子句中加入表达式。