繁体   English   中英

使用 JavaScript 模板文字连接字符串时出现问题

[英]Problem concatenating strings using JavaScript template literals

我正在使用 prisma.io 库,但在使用模板文字来执行我想要的操作时遇到了问题。 也许我对他们的了解不够好。

我有这个电话:

const result = await prisma.$queryRaw`SELECT * FROM User WHERE active = ${activeSetting}`

这完全符合我的要求。

但是,我想在末尾选择 append 一个字符串,而不必重做完整的语句。

也就是说,我想要这样的东西:

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 这很容易出错。

您可以像这样使用三元运算符

const result = await prisma.$queryRaw`SELECT * FROM User WHERE active =
      ${activeSetting} ORDER BY ${orderBy === 'ASC' ? 'ASC' : 'DESC'}`

但最好不要写原始的 SQL 字符串,因为你可能会让自己容易受到SQL 注入的攻击

我意识到我可以做一个更大的 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
      }`;

如果需要,它还让我在子句中添加表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM