You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中Prisma $queryRaw的WHERE IN传入UUID失效问题

解决Prisma $queryRaw中WHERE IN子句传入UUID数组的问题

问题根源

你手动拼接UUID字符串并错误调用uuid()函数的方式存在问题:

  • 手动拼接SQL会引发SQL注入风险,且Prisma的模板字符串插值无法正确识别这种拼接后的参数
  • 没必要手动给UUID值加单引号,uuid()函数的用法也不符合Prisma参数绑定规范

正确实现方式

方法1:用Prisma.sql和Prisma.join(推荐)

借助Prisma提供的工具函数安全处理数组参数,自动完成UUID类型转换:

const { Prisma } = require('@prisma/client');
const ids = ['r45545-2a554-458c-a94f-3ccd2f82582b','4fdgdgfdg-2f1b-4af5-81c8-3a29494a45f9'];

const datas = await prisma.$queryRaw`
  SELECT * FROM public."myTable" 
  WHERE "id" IN (${Prisma.join(ids)})
`;

方法2:直接绑定数组参数

Prisma 4.x及以上版本支持直接将数组作为参数传入,自动处理语法和类型:

const ids = ['r45545-2a554-458c-a94f-3ccd2f82582b','4fdgdgfdg-2f1b-4af5-81c8-3a29494a45f9'];

const datas = await prisma.$queryRaw`
  SELECT * FROM public."myTable" 
  WHERE "id" IN (${ids})
`;

关键注意事项

  • 绝对禁止手动拼接SQL字符串,必须用Prisma参数绑定机制,防止SQL注入
  • Prisma会自动识别UUID类型,无需手动调用uuid()或添加单引号
  • PostgreSQL中带大小写的表名/字段名必须用双引号包裹,保持代码中的写法一致

内容的提问来源于stack exchange,提问作者Esfak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:23:12