[請益] 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