当前位置:主页 > 建站教程 > 织梦CMS >

修正dedecms dede:sql like模糊查询当前%~title~% 多出’号的问题

发布时间:2019-06-26 来源:互联网 浏览: 关键词:dedecms 

在dedecms中我们常会用到{dede:sql},在sql使用变量经常也会用到。比如我们要在dede_archives表中查询某个关键词与当前标题做匹配的时候,如变量为title,那么语句如下:

{dede:sql sql="SELECT * FROM dede_archives WHERE tag=~title~"}

这种是比较简单和常用的方式。但在使用过程中我发现,有时会遇到这样一种状况,即模糊搜索匹配的标题(sql使用like和%)。

按照上面来说应该这样写:

{dede:sql sql="SELECT * FROM  dede_archives WHERE  title like '%~title~%' "}
但是这样报错了,编译的结果是select * from dede_archives where title like '%'$title'% 造成sql语句错误。多出来了' 号。后来发现是sql语句的规则问题,所以就要修改{sql.lib.php} 的标签。
以下为修改方法:
1. 复制include/taglib/sql.lib.php文件并重命名为likesql.lib.php  ( likesql 这个文件名字可以自己取)
2. 将32行中
function lib_sql(&$ctag,&$refObj)
修改为
function lib_likesql(&$ctag,&$refObj)  (lib_likesql 这个方法名字也可以自己取)

3. 将48行中

$sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql);

修改为:

$sql = str_replace($conditions[0][$key],addslashes($refObj->Fields[$value]), $sql);

修正dedecms dede:sql like模糊查询当前%~title~% 多出’号的问题

修正 dedecms dede:sql like模糊查询当前%~title~% 多出'号的问题

修改完成后把该文件上传到 include/taglib/ 目录下面即可。

最后的调用标签改为:

{dede:likesql  sql="SELECT * FROM dede_archives WHERE keywords LIKE '%~title~%' order by  click desc limit 10"}
<li>
       <a href='[field:id runphp='yes'] $id=@me;@me='';$url=GetOneArchive($id);@me=$url['arcurl'];[/field:id]' title="[field:title/]" target="_blank">[field:title function=cn_substr(@me,40,0)/]</a>     
      </li>
</a>
{/dede:likesql}

责任编辑:mokuge
共有人阅读,期待你的评论!评论
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!
Top