建站幫助

誠信合作, 高質專業!

Phpcms v9關鍵詞為空時插入數據庫報Duplicate錯誤的Bug修正方法

2019-06-13 16:44:13 瀏覽 我要評論

最近不知道大家發現沒,在Phpcms v9管理后臺在添加標題后不會自動獲取關鍵詞了,這是因為Phpcms官方的分詞服務器(http://tool.phpcms.cn/api/get_keywords.php)掛了,于是造成了內置的分詞api接口(api.php?op=get_keywords)報錯,自然不能獲取到關鍵詞了,于是引發了關鍵詞為空時插入數據庫報Duplicate錯誤的Bug。

先看看報錯提示:

MySQL Query : INSERT INTO `cmsyou_sql`.`v9_keyword`(`keyword`,`siteid`,`pinyin`,`videonum`) VALUES ('','1','','1')

MySQL Error : Duplicate entry '' for key 'PRIMARY'

MySQL Errno : 1062

Message : Duplicate entry '' for key 'PRIMARY'

這個報錯字面的意思是:不能重復插入為空的字段,也就是當關鍵詞為空的時候,Phpcms還是執行了$keyword_db->insert保存數據的函數,造成錯誤。經過CMSYOU檢查,發現錯誤來源于內容模型的關鍵字字段的update函數,加上一個判斷就好。

Phpcms v9關鍵詞為空時插入報錯:Duplicate entry

具體修正方法:

修改/phpcms/modules/content/fields/keyword/update.inc.php文件:

if (!$r = $keyword_db->get_one(array('keyword'=>$v, 'siteid'=>$siteid))) {

$letters = gbk_to_pinyin($v);

$letter = strtolower(implode('', $letters));

$tagid = $keyword_db->insert(array('keyword'=>$v, 'siteid'=>$siteid, 'pinyin'=>$letter, 'videonum'=>1), true);

} else {

$keyword_db->update(array('videonum'=>'+=1'), array('id'=>$r['id']));

$tagid = $r['id'];

}

$contentid = $this->id.'-'.$this->modelid;

if (!$keyword_data_db->get_one(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid))) {

$keyword_data_db->insert(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid));

}

unset($contentid, $tagid, $letters);

修改為:

if($v!=''){

if (!$r = $keyword_db->get_one(array('keyword'=>$v, 'siteid'=>$siteid))) {

$letters = gbk_to_pinyin($v);

$letter = strtolower(implode('', $letters));

$tagid = $keyword_db->insert(array('keyword'=>$v, 'siteid'=>$siteid, 'pinyin'=>$letter, 'videonum'=>1), true);

} else {

$keyword_db->update(array('videonum'=>'+=1'), array('id'=>$r['id']));

$tagid = $r['id'];

}

$contentid = $this->id.'-'.$this->modelid;

if (!$keyword_data_db->get_one(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid))) {

$keyword_data_db->insert(array('tagid'=>$tagid, 'siteid'=>$siteid, 'contentid'=>$contentid));

}

unset($contentid, $tagid, $letters);

}

修改后記得在管理后臺更新緩存之后再測試,歡迎留言與CMSYOU一起探討CMS!

延伸閱讀:

Phpcms v9刪除文章不能同步刪除相關關鍵詞數據的修正方法

Phpcms v9關鍵詞為空時插入報錯:Duplicate entry '' for key 'PRIMARY'

我要收藏
點個贊吧

相關閱讀

本月熱門

精選推薦

在線客服

掃一掃,關注我們

掃一掃,關注我們
穿越火线官方网站