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

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

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

761

主题

775

帖子

3万

积分

董事

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

积分
32853
发表于 19-2-24 16:52:36 | 显示全部楼层 |阅读模式      紫钻仅向指定用户开放  
       一般的SQL模糊查询语句为
" E+ W! R% `! K% E9 q: j0 f2 V
  1. SELECT * FROM `_table` WHERE name LIKE '% $s %';
复制代码
      其中,name为字段,$s为查询内容中包含的变量
6 ^2 d! `' T" J" t& n: E( |+ v
4 A7 N$ Q" I, m( ~5 u' p, }       但在discuz的模糊查询中,会有一定的区别
/ M; G; C; ]! R6 |7 l
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE '% %s %'", array($this->_table,$str));
复制代码
       但是查询语句执行后,利用浏览器的调试功能查看会看到错误警告:
& h. R  M' c$ c8 ?3 P2 U7 A
  1. <p>     Discuz! Database Error</p><p>           (0) SQL string format error! This SQL need "4" vars to replace into.</p>
复制代码
       (SQL语句格式错误,该语句需要4个变量)
: h5 \0 L" a# R. E& a8 z) P
4 ?3 i( C  u. \         出现的原因是discuz把模糊查询中的 ‘%’ 也会当成变量,因此出现错误* d# o/ l% ?9 Z4 G, S' G' E

7 H, @$ k2 u' B       【2】修改查询语句,修改变量的表达方式,把%放在array的变量里面而不是查询语句中' ?7 f; t2 {$ v$ V: J( {: U
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE '%s'", array($this->_table,'%'.$str.'%'));
复制代码
       但是,当输入查询的内容(如:你好)还是会出现一个问题:5 E$ c0 E: j* C5 F/ [1 r
  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>
复制代码
       查询的语句翻译为如下:
7 J) a6 ~! `4 ]. w: ]; ~" Y/ G
  1. SELECT * FROM _table WHERE name LIKE ''%你好%''
复制代码
, k: \8 z# B: r: `1 R4 h
       从显示的SQL语句中会发现,like后面的条件是在双引号内,而语句里一般为单引号,这是因为生成的语句会自动把条件加单引号,所以条件最终变为双引号,解决的方法是:
, a' }/ K, i( j/ Q
9 j. x5 [: F. ?0 u       把select语句里的 '%s' 的单引号去除
" H% W: t) p+ ?/ \
  1. DB::fetch_first("SELECT * FROM %t WHERE name LIKE %s", array($this->_table,'%'.$str.'%'));
复制代码

" i6 @1 P# k2 C" X0 ^8 C. _9 I' Y+ @; p' t! u. p- W

0

主题

10

帖子

2

积分

1°伸手党

Rank: 2

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

使用道具 举报

网站简介

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