Emlog6.0的标签不存在,提示SQL执行错误应该怎么解决?

管理员使用的最新版本的Emlog 6.0,发现不存在的TAG(标记)时,将显示如下所示的SQL错误页面。 如何优化此BUG,或解决此错误?

风起兮资源

首先,找到文件“include\controller\tag_controller.php”,文件如下

风起兮资源网

上图箭头所指的地方,SQL错误就是tid不对

定位到“include\model\tag_model.php”文件,第46行代码:

function getTagByName($tagName) {
        $tagId = $this->getIdFromName($tagName);
        return $this->getTagById($tagId);
    }


同文件内,查找定位到171行的函数getIdFromName():

/**
     * 从标签名查找标签ID
     * @param string $tagName 标签名
     * @return int|bool 标签ID | FALSE(未找到标签)
     */
    function getIdFromName($tagName){
        $sql = "SELECT `tid` FROM `" . DB_PREFIX . "tag` WHERE `tagname` = '" . $this->db->escape_string($tagName) . "'";
        $query = $this->db->query($sql);
 
        if ($this->db->num_rows($query) === 0) {
            return FALSE;
        }
 
        $result = $this->db->fetch_array($query);
        return $result['tid'];
    }


Tag名不存在的时候,此函数返回FALSE bool变量

那么变量$tagId就被赋值为bool值 FALSE,不是约定的tagID数值变量

修复方法:


把上述函数中10~12行做修改:

if ($this->db->num_rows($query) === 0) {
            header('HTTP/1.1 301 Moved Permanently');
            header('Location:/?keyword='.urlencode($tagName));
            exit(0);
        }


修改后:

风起兮

做了一个301的跳转,跳转到关键词搜索页面,这样就可以避免用户出现的报错页面了,完美解决

更多建站技术emlog优化教程,可以到https://www.fengqx.com/sort/jzjc



版权声明:《 Emlog6.0的标签不存在,提示SQL执行错误应该怎么解决? 》为作者风起兮原创文章,转载请注明原文地址!
最后编辑:2020-7-1 16:07:38
分享到:
赞(1)
发表评论 / Comment

用心评论~