欢迎访问士人网络天水网站建设专业服务平台
网站地图 | 联系我们
天水士人网络
天水网络公司电话
当前位置:主页 > 网站建设 > 建站知识 >

dedecms系统内容页使用sql标签查询调用条件语句是变量字段的方法

时间:2018-05-22 | 来源:www.eshiren.com | 作者:天水网站建设 | 点击: 1088 次

dedecms系统内容页使用sql标签查询调用条件语句是变量字段的方法

  在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);

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

  最后的调用标签改为:{dede:likesql sql="" }

  {dede:likesql sql="SELECT * FROM `dede_archives` WHERE `title` like '%~title~%' "}

  进阶实际应用:

  查询附加表某个字段匹配当前这个字段(变量)的其它文档列表,可以这样编写代码