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

首先,找到文件“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