看板 PHP 關於我們 聯絡資訊
小弟菜鳥 不知道如何下標題 我用的是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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.47.164.38 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1513844563.A.B74.html ※ 編輯: kiraseedone (114.47.164.38), 12/21/2017 16:23:15
MOONRAKER: 試試改用regexp operator 他行為比較接近一般的regex 12/21 18:55
MOONRAKER: https://goo.gl/3Tghxj 12/21 18:56
MOONRAKER: 以這個要求而言改為where item2 regexp '2XXXX4_'即可 12/21 18:58
感謝大大 這個剛剛在工具上跑 的確完美沒問題! 但到了PDO上好像不能用QAQ 餵狗後找不到什麼資訊Orz $sql= "SELECT * FROM New where item2 regexp ? "; $cp_iterm=$iterm[$k-1]."_"; $sth->bindParam(1,$cp_iterm); 變成什麼都找不到Orz 我繼續爬文 感謝大大Orz ※ 編輯: kiraseedone (114.47.164.38), 12/21/2017 19:53:47 ※ 編輯: kiraseedone (114.47.164.38), 12/21/2017 20:08:40
altecjc: 來個蠢方法?WHERE item2 LIKE '2XXXX4_%' OR item2 12/21 22:13
altecjc: LIKE '%_2XXXX4_%' OR item2 LIKE '%_2XXXX4' 12/21 22:14
%_2xxx4_% _<-這個符號似乎要配上/ 和ESCAPE "/"轉譯才能查找 但這僅限在工具上面可以使用 如果要套到pdo上面 似乎會出問題((找不到資料)) 比較大的問題是想套在PDO上面 REGEXP有找到資料似乎SQLITE不支援 必須自己寫,找到別人寫的涵式 http://scar.tw/article/2012/09/20/extend-sqlite-to-support-regexp/ 但套用進去配上上面那段似乎沒用Orz ※ 編輯: kiraseedone (114.47.164.38), 12/21/2017 22:21:29
MOONRAKER: 結果還是底線問題?真是神祕 :| 12/22 07:45
altecjc: 這樣子可執行,不知道是不是你要的 12/22 12:23
altecjc: https://tinyurl.com/ycoth687 12/22 12:23
altecjc: 但我是用 mariadb 測試的 12/22 12:29
看來問題是選的資料庫類型了(?) 用SQLITE這方法好像不行Orz ※ 編輯: kiraseedone (114.47.164.38), 12/23/2017 13:08:55
MOONRAKER: sqlite很多方面都很原始 :( 12/23 14:43