项目场景:
SQL异常
问题描述
Mybatis模糊查询无法确定参数$1的数据类型: ERROR: could not determine data type of parameter $1
<if test="params.xxx != null and params.xxx != ''">
AND AA.PROBLEM_CODE LIKE CONCAT('%', #{params.xxx}, '%')
</if>
原因分析:
补充:对于mysql 的 like 而言,一般都要用 like concat() 组合,可以防止sql注入。
但是使用pgsql时添加了参数stringtype=unspecified,就会报无法确定参数类型的错。
解决方案:
like '%${params.xxx}%'
出现的问题:'%${xx}%'的写法无法防止sql注入,不是最佳解决办法
最佳方案
AND AA.PROBLEM_CODE like '%'||#{params.xxx}||'%'
或者使用TEXT强制转换数据类型为字符串
AND AA.PROBLEM_CODE LIKE CONCAT('%', #{params.xxx}::text, '%')