簡體   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