最近老有用户反应发帖会遇到下面这样的错误,不知道什么原因会引起这个主键的重复呢?下面是截图:
觉的这个和这个表有关系:pre_forum_post_tableid 分表协调表的记录估计除了问题,因为刚才跟踪到dz的function中的此方法有一些协议:
- function insertpost($data) {
- if(isset($data['tid'])) {
- $tableid = DB::result_first("SELECT posttableid FROM ".DB::table('forum_thread')." WHERE tid='{$data['tid']}'");
- } else {
- $tableid = $data['tid'] = 0;
- }
- $pid = DB::insert('forum_post_tableid', array('pid' => null), true);
- if(!$tableid) {
- $tablename = 'forum_post';
- } else {
- $tablename = "forum_post_$tableid";
- }
- $data = array_merge($data, array('pid' => $pid));
- DB::insert($tablename, $data);
- if($pid % 1024 == 0) {
- DB::delete('forum_post_tableid', "pid<$pid");
- }
- save_syscache('max_post_id', $pid);
- return $pid;
- }
复制代码 这个方法返回的就是重复的那个发帖id
查看dx文章表forum_post里的字段pid是否AUTO_INCREMENT自增的,报这个错误是表里已存在该主键了。一般出现这错误是在升级系统导数据或采集其他数据的时候修改了该字段的属性。把该字段设置成自增!
建议看看此表是否损坏了,id重复出现可能是你二次开发中的插入不当导致的,造成DZ的协调表 出现异常,以前论坛也出现过这种情况,把二次开发的程序好好检测一下,看有无插入关联的表出现插入失败,抓取一下异常,修复程序后主要是你把这个出现问题的表赶紧修复一下...
Discuz官方的解决办法:
错误编号:1062
问题分析:
向唯一字段插入相同数据。
解决方法:
1、请检查程序是否做了修改,如果修改过,建议用我们的原程序覆盖您的修改,再次检查问题。
2、如果您的站点上有 phpMyAdmin ,还可以通过他检查下您的数据库**错的表的自增字段的当前自增值是否和该表中自增字段的最大值相同,如果相同则会出现该错误。
3、如果您正在转移数据库,请确认数据库的版本是否相同。
4、如果以上方法还未解决,请恢复备份,用 DBCheck 将数据库检验为标准结构,并且重新开始升级。
方法 2 的检查修改详细流程:(以 Discuz! 的 threads 表为例,其他操作均相同)
1)进入您的 phpMyAdmin ,然后在左侧选择您出错的数据库。
2)选择您出错的表,并找到该表的自增字段,有 auto_increment 标识的字段即为该表的自增字段。
3)点击浏览,然后根据自增字段降序排序,记下自增字段的当前最大值。
|
上一篇: 通过THINKPHP调用discuz的$_G全局变量下一篇: Discuz X2.5积分系统组成及积分的更新问题
|