[请益] PDO模糊查询资料

楼主: kiraseedone   2017-12-21 16:22:41
小弟菜鸟 不知道如何下标题
我用的是sqlite
我想找寻一笔资料是item2中含有2XXXX4
item2[0]=>2XXXX40_2XXXX41_2XXXX4_2XXXX46_2XXXX5
item2[1]=>2XXXX40_2XXXX41_2XXXX42_2XXXX43_2XXXX44
执行
select * from new where item2 like "%2XXXX4%"
没问题 可以找到item2[0],但连同item2[1]都跟着出来了
原因应该是2XXXX4% %符号可以接任意字符,
所以不只4 ,41,42,4*都会符合条件
我想到的解决办法是
select * from new where item2 like "%2XXXX4/_%" escape "/"
让"_"符号也当做结尾,
这样只会找到item2[0]
但是这个要套到pdo上面
$sql= "SELECT * FROM New where item2 like ? ";
$sql_sub="and item2 like ? ";
$sql = $sql . 'ESCAPE "/"';
$sth=$db->prepare($sql);
$cp_iterm='%'.2XXXX4.'/_%';
$sth->bindValue($k,$cp_iterm);
是因为防注入的关系" _ "符号一直不能列为条件吗?
有其他方法可以解决吗Orz
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-12-21 18:55:00
试试改用regexp operator 他行为比较接近一般的regexhttps://stackoverflow.com/questions/4078633/https://goo.gl/3Tghxj以这个要求而言改为where item2 regexp '2XXXX4_'即可
作者: altecjc (嘉诚)   2017-12-21 22:13:00
来个蠢方法?WHERE item2 LIKE '2XXXX4_%' OR item2LIKE '%_2XXXX4_%' OR item2 LIKE '%_2XXXX4'
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-12-22 07:45:00
结果还是底线问题?真是神祕 :|
作者: altecjc (嘉诚)   2017-12-22 12:23:00
这样子可执行,不知道是不是你要的https://tinyurl.com/ycoth687但我是用 mariadb 测试的
作者: MOONRAKER (㊣牛鹤鳗毛人)   2017-12-23 14:43:00
sqlite很多方面都很原始 :(

Links booklink

Contact Us: admin [ a t ] ucptt.com