如何使用 prisma 和 postgresql 处理条件准备语句?

2024-01-11

我有一个搜索查询,其参数根据客户端输入而变化。

await prisma.$queryRaw(`SELECT column FROM table ${condition ? `WHERE column = '${condition}'`  :' ' } `) 

如何使用准备好的语句编写此查询并避免重复查询。我想出的唯一解决方案如下:

const result = condition ? await prisma.$queryRaw(`SELECT column FROM table WHERE column = $1`,condition) : await prisma.$queryRaw(`SELECT column FROM table`)

这样做的目的是避免第一个查询中的 SQL 注入。

EDIT在尝试了@Ryan建议的解决方案后,我收到以下错误:

Raw query failed. Code: `22P03`. Message: `db error: ERROR: incorrect binary data format in bind parameter 1`

这是我的实现:

    const where = Prisma.sql`WHERE ${searchConditions.join(' AND ')}`;
    const fetchCount = await prisma.$queryRaw`
    SELECT 
      COUNT(id)
    FROM
      table
    ${searchConditions.length > 0 ? where : Prisma.empty}
  `;

这将在 prisma 日志中转换为以下内容:

Query: 
    SELECT 
      COUNT(id)
    FROM
      table
    WHERE $1
   ["column = something"]

SOLUTION我必须做很多返工才能达到我想要的效果。这是其背后的想法:

对于每个搜索条件,您需要执行以下操作:

let queryCondition = Prisma.empty;
    if (searchFilter) {
      const searchFilterCondition = Prisma.sql`column = ${searchFilter}`;

      queryCondition.sql.length > 0
        ? (queryCondition = Prisma.sql`${queryCondition} AND ${streamingUnitCondition}`)
        : (queryCondition = searchFilterCondition);
    }

之后,在最终的搜索查询中,您可以执行以下操作:

SELECT COUNT(*) FROM table ${queryCondition.sql.length > 0 ? Prisma.sql`WHERE ${queryCondition}` : Prisma.empty}

你可以这样做:

import { Prisma } from '@prisma/client'

const where = Prisma.sql`where column = ${condition}`

const result = await prisma.$queryRaw`SELECT column FROM table ${condition ? where : Prisma.empty}`
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 prisma 和 postgresql 处理条件准备语句? 的相关文章

随机推荐

  • IIS 8.5应用程序初始化和Windows身份验证

    我正在尝试使用 IIS 8 5 上的应用程序初始化模块来预热 Intranet 应用程序 设置正确并且预热有效 但是一旦我禁用匿名身份验证 应用程序就不再预加载 内存使用量仅为 20mb 而初始化访问站点时内存使用量约为 200mb 由于这
  • Node.js:高效读取一系列行

    我目前正在使用 Node js 并且想知道如何从大型文本文件中读取一系列行 一个明显的解决方案如下所示 var fs require fs fs readFile file function err data var lines data
  • Javascript 数字和货币本地化 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我在 JavaScript 中遇到了数字和货币本地化问题 我需要的是一个方便的library为了那个原
  • Spark BlockManager 在本地主机上运行

    我有一个简单的脚本文件 我试图在模仿教程的 Spark Shell 中执行here https spark apache org examples html import org apache spark SparkConf import
  • 为什么要用“FragmentDefinition”包装“Dialog”?

    UI5 对话框可以直接定义为Dialog
  • Gmail、Yahoo、Facebook、Twitter 联系人 PHP 中的导入器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • iOS:在后台更新媒体信息

    我目前在我的应用程序中使用 MPNowPlayingInfoCenter 来显示正在播放哪首歌曲 但我希望将 HTTP Live Streaming 合并到我的应用程序中 该应用程序将在后台出现任意数量的不同曲目 有没有办法在应用程序处于后
  • 使用第三方库

    我想集成一个Timeline http visjs org docs timeline 在我的镀铬扩展中 我已经下载了这个插件的js文件和css文件 并将它们放在我的chrome扩展的根目录中 chrome 扩展本身只是向现有页面注入JS并
  • Hibernate 中 load() 与 get() 相比有何优势?

    谁能告诉我有什么好处load vs get 在休眠状态下 这些方法的语义解释并不能解释它们之间的实际差异 实际规则如下 Use get 当你想加载一个对象时 Use load 当您需要获取对象的引用而不发出额外的 SQL 查询时 例如 创建
  • 将单独的日志级别记录到 log4j2 属性文件中的单独文件

    有什么办法可以为不同的日志级别创建单独的日志文件吗 我想要的只是记录error记录到一个文件并info记录到另一个文件 我没有找到任何解决方案来做到这一点log4j2 properties 这里是log4j2 xml我得到了并且效果很好 谁
  • 如何在vim中在新窗口中打开新文件

    有没有办法在新的 shell 窗口或选项卡中打开 vim 我习惯做 mate file 这会在新窗口中打开文件 我更喜欢有一个 中央外壳 我可以根据需要在其他窗口或选项卡中发出命令并编辑文件 人们通常如何在本地打开 vim 文件 从 vim
  • 如何使用 Google App Engine Blobstore 保存网页图像

    UPDATE 这个问题最初是在不支持编程文件创建 例如通过 url 的情况下提出的 这已经改变了 请参阅 http code google com appengine docs java blobstore overview html Wr
  • 电容器推送通知和 FCM 生成不同的令牌,导致 android 崩溃

    带有 Capacitor 推送通知和 FCM 插件的 Ionic 5 应用程序 import FCM from capacitor community fcm import ActionPerformed PushNotificationS
  • 厨师从模板和刀搜索中创建逗号分隔的字符串

    我正在尝试从 Knife 查询创建动态创建的以逗号分隔的 Splunk 索引器列表 数据端口附加到每个主机名 该查询将返回的主机列表提供给模板和相应的 erb 然而 尽管当我聚合到测试 Docker 实例时没有抛出任何错误 但 conf 文
  • 登录多线程应用程序,在构造函数中使用互斥体

    我一直在编写一个基于 RAII 的 C 方法入口 出口记录器 用法是这样的 void Class Method METHOD NAME Class Method I know I could use FUNCTION instead lt
  • 如何获取值数组作为 plusargs?

    如何获取值数组作为参数 我需要从命令行获取一组未定义大小的命令 如何将这些参数放入数组或队列中 Eg CMDS READ WRITE READ N WRITE 它应该被带到一个数组中 value plusargs不支持数组 但支持字符串 看
  • 帮助重新采样/上采样

    我有一个包含 240 个数据点的数组 采样频率为 600hz 代表 400ms 我需要将此数据重新采样为以 1024hz 采样的 512 个数据点 代表 500ms 我假设因为我从 400 毫秒的数据开始 所以最后 100 毫秒只需要用 0
  • 无法在新创建的 GKE 集群上初始化 helm (tiller)

    我刚刚在 Google Cloud 平台上创建了一个 GKE 集群 我已经在云控制台安装了helm helm version version BuildInfo Version v3 0 0 GitCommit e29ce2a54e96cd
  • 移动的pdf文件的htaccess规则?

    我已经尝试过 我真的已经 我屈服了 Wordpress 和 htaccess 哦 痛苦 旧的静态站点的根目录中有 pdf doc xls 和 zip 文件 我已将所有文件作为媒体项加载 因此它们都位于 wp content uploads
  • 如何使用 prisma 和 postgresql 处理条件准备语句?

    我有一个搜索查询 其参数根据客户端输入而变化 await prisma queryRaw SELECT column FROM table condition WHERE column condition 如何使用准备好的语句编写此查询并避