使用pg的Pool查询PostgreSQL时含引号的LIKE模糊查询报错如何解决
pg中带LIKE的参数化查询报错解决方案
错误原因
pg的参数化查询规则为:仅未被单引号包裹的$n格式占位符会被识别为待替换参数。你的写法将$1放在'%$1%'的单引号内,驱动不会处理该占位符,整个%$1%会被直接提交到PostgreSQL,被解析为字段名触发不存在报错。
解决方法
方案1(更推荐):通配符拼接在参数侧
将通配符和查询字符串在传入参数阶段拼接,SQL语句中只保留独立的占位符即可:
pool.query("SELECT * FROM database WHERE field LIKE $1", [`%${str}%`], (...) => { // 业务逻辑 });
方案2:SQL内使用字符串拼接运算符
利用PostgreSQL原生的||字符串拼接运算符,在SQL语句内完成通配符和参数的拼接:
pool.query("SELECT * FROM database WHERE field LIKE '%' || $1 || '%'", [ str ], (...) => { // 业务逻辑 });
内容的提问来源于stack exchange,提问作者Rafael
相关产品推荐
相关产品推荐

