• 本网豪情赞助商

  • login failed for display 0 ubuntuallowed_u
  • css设定文本超出一行或多行就隐藏并显示省略
  • css设定文本超出一行或多行就隐藏并显示省略
  • 微信小程序如何把接口调用成功的回调函数返回
  • CodeIgniter - 数据库的增删改查
  • php生成excel的三种方式
  • 小程序UI库推荐
  • 多个句子竖向排列
  • 美团,大众点评,58城市行政区域和商圈数据实
  • java.security.InvalidKeyException: Illega
  • h3>

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


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


    文章TAG:

     在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=""  }

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