作者kiraseedone ()
看板PHP
标题[请益]PDO查询资料
时间Thu Dec 21 16:22:41 2017
小弟菜鸟 不知道如何下标题
我用的是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://webptt.com/cn.aspx?n=bbs/PHP/M.1513844563.A.B74.html
※ 编辑: kiraseedone (114.47.164.38), 12/21/2017 16:23:15
1F:→ MOONRAKER: 试试改用regexp operator 他行为比较接近一般的regex 12/21 18:55
4F:→ 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
5F:→ altecjc: 来个蠢方法?WHERE item2 LIKE '2XXXX4_%' OR item2 12/21 22:13
6F:→ 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
7F:→ MOONRAKER: 结果还是底线问题?真是神秘 :| 12/22 07:45
8F:→ altecjc: 这样子可执行,不知道是不是你要的 12/22 12:23
10F:→ altecjc: 但我是用 mariadb 测试的 12/22 12:29
看来问题是选的资料库类型了(?)
用SQLITE这方法好像不行Orz
※ 编辑: kiraseedone (114.47.164.38), 12/23/2017 13:08:55
11F:→ MOONRAKER: sqlite很多方面都很原始 :( 12/23 14:43