腾讯云网站解决方案帮您轻松应对建站成本高/网络不稳等常见问题

在discuz上实现模糊查询出现的问题及解决方法

1
回复
1742
查看
[复制链接]

764

主题

778

帖子

3万

积分

董事

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
32970
发表于 19-2-24 16:52:36 | 显示全部楼层 |阅读模式      紫钻仅向指定用户开放  
       一般的SQL模糊查询语句为
0 a; M9 w3 Q  @  X5 X2 L7 X: K
  1. SELECT * FROM `_table` WHERE name LIKE '% $s %';
复制代码
      其中,name为字段,$s为查询内容中包含的变量; }- L2 t: p9 ^+ k, E8 ]/ C

/ {0 d0 D3 O, V       但在discuz的模糊查询中,会有一定的区别
: Q9 D. M6 Y$ Z& l  C* N% u: P
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE '% %s %'", array($this->_table,$str));
复制代码
       但是查询语句执行后,利用浏览器的调试功能查看会看到错误警告:
; H: u- T4 G# P1 Z* E: X" o
  1. <p>     Discuz! Database Error</p><p>           (0) SQL string format error! This SQL need "4" vars to replace into.</p>
复制代码
       (SQL语句格式错误,该语句需要4个变量)7 B8 p5 Z5 m8 K& j3 Y' I! I8 U

+ m( h! I$ E$ a# [5 t# e         出现的原因是discuz把模糊查询中的 ‘%’ 也会当成变量,因此出现错误0 P( z$ m1 y" ?
3 i2 @8 f8 j6 C& b! K/ [
       【2】修改查询语句,修改变量的表达方式,把%放在array的变量里面而不是查询语句中' Q; c) Q+ ?% G, i( ?% F; s
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE '%s'", array($this->_table,'%'.$str.'%'));
复制代码
       但是,当输入查询的内容(如:你好)还是会出现一个问题:
# [: \& }9 `8 U
  1. <p>       (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%\xE4\xBD\xA0\xE5\xA5\xBD%''' at line 1</p><p>SELECT * FROM _table WHERE name LIKE ''%你好%''</p>
复制代码
       查询的语句翻译为如下:
: W7 Q& u: u7 H9 ]$ D5 F* |
  1. SELECT * FROM _table WHERE name LIKE ''%你好%''
复制代码
4 p$ j4 T' A# q! S) b! M
       从显示的SQL语句中会发现,like后面的条件是在双引号内,而语句里一般为单引号,这是因为生成的语句会自动把条件加单引号,所以条件最终变为双引号,解决的方法是:+ l" W' a3 l+ C: g" W  v9 A0 Z- P

) k7 w$ E. W# q* \       把select语句里的 '%s' 的单引号去除
. q) e: x( ?1 x" X) Y
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE %s", array($this->_table,'%'.$str.'%'));
复制代码
/ f" `+ ^  `/ ~  s
9 A3 o9 X+ J/ m

0

主题

15

帖子

2

积分

1°伸手党

Rank: 2

积分
2
发表于 19-9-25 11:35:24 | 显示全部楼层         
有道理。。。
回复

使用道具 举报

网站简介

球球发,是一家 Discuz! 商业插件、风格模板、网站源码、 Discuz!运营维护技术等于一体的交流分享网站,全站95%的资源都是免费下载,对于资源我们是每天更新,每个亲测资源最新最全---球球发(如果我们有侵犯了您权益的资源请联系我们删除