关于 sqlPara 参数问题

#sql("paginate")
  SELECT * FROM sys_account
  WHERE TRUE 
  #if(notBlank(nickName)) AND nick_name LIKE CONCAT('%', '#(nickName)', '%') #end
  #if(notBlank(keyword)) AND keyword LIKE CONCAT('%', #para("keyword"), '%') #end
#end

当 keyword 不为空时 查不出数据(数据库是满足查询条件的情况),nickName 不为空时是可以查询出数据的。

评论区

JFinal

2017-09-07 15:26

为啥 nickName 不使用 para 指令,而后面的 keywrod 却使用了:
#para(nickName)

2B的It青年

2017-09-08 14:54

@JFinal 使用 #para(nickName)时查询不到数据,所有现在已经改用
SELECT * FROM sys_account
WHERE TRUE
#if(notBlank(nickName)) AND nick_name LIKE CONCAT('%', '#(nickName)', '%') #end
#if(notBlank(keyword)) AND keyword LIKE CONCAT('%', '#(keyword)', '%') #end

JFinal

2017-09-08 15:49

@2B的It青年 nickName 部分没有使用 #para 指令,并且还在在外面套了一层引号,当然就用不了了:
CONCAT('%', '#(nickName)', '%')
改成如下:
CONCAT('%', #para(nickName), '%')

如果套了引号生成的 sql 为: CONCAT('%', '?', '%')
而正确的生成结果为: CONCAT('%', ?, '%')
因为问号占位对于 sql 来说是一个特殊字符,而并不是字符串,带上引号就变成了一个普通字符串,与占位符毫无关系

2B的It青年

2017-09-08 17:05

@JFinal 波总误解了,我的意思是我之前CONCAT('%', #para(nickName), '%')这样写用不了,换成CONCAT('%', '#(nickName)', '%') 直接拼接成sql 用的。

热门反馈

扫码入社