后台运行记录里面老是出现1062错误,请教一下如何解决
(1062) Duplicate entry '18133911-436052' for key 'PRIMARY'INSERT INTO forum_hotreply_member SET `tid`='8273477' , `pid`='18133911' , `uid`='436052' , `attitude`='1'PHP:
forum.php#require(%s):0067
source/module/forum/forum_misc.php#discuz_table->discuz_table->insert():1809
source/class/discuz/discuz_table.php#discuz_database::discuz_database::insert():0081
source/class/discuz/discuz_database.php#discuz_database::discuz_database::query():0060
source/class/discuz/discuz_database.php#db_driver_mysqli->db_driver_mysqli->query():0142
source/class/db/db_driver_mysqli.php#db_driver_mysqli->db_driver_mysqli->halt():0148
source/class/db/db_driver_mysqli.php#break():0223
User: uid=43605; IP=112.95.210.17; RIP:183.134.17.20 Request: /forum.php?mod=misc&action=postreview&do=support&tid=827477&pid=1813911&hash=97b8cb2d&ajaxmenu=1&inajax=1&ajaxtarget=ajaxid_0.2399481829085348_menu_content
曾经把forum_hotreply_member这个表中的tid改成了int10,但还是会报错,请教一下了,版本为discuz x3.4,mysql是5.7.37,php是7.4
万分感谢。
请问你解决了吗?我也出现了
我是在处理后台举报的时候出现的
从你提供的错误信息来看,`1062` 错误是 MySQL 中的 `Duplicate entry` 错误,表示你正在尝试插入一条已经存在的主键或唯一键记录。具体来说,错误信息中的 `Duplicate entry '18133911-436052' for key 'PRIMARY'` 表示在 `forum_hotreply_member` 表中,`PRIMARY` 键(主键)已经存在 `tid` 为 `18133911` 和 `uid` 为 `436052` 的记录。
### 问题分析:
1. **主键冲突**:`forum_hotreply_member` 表的主键可能是由 `tid` 和 `uid` 组成的复合主键。当你尝试插入一条记录时,如果 `tid` 和 `uid` 的组合已经存在,就会触发 `1062` 错误。
2. **重复插入**:可能是由于用户在短时间内多次点击了“支持”按钮,导致多次尝试插入相同的记录。
### 解决方案:
1. **检查插入逻辑**:
- 在插入数据之前,先检查 `forum_hotreply_member` 表中是否已经存在相同的 `tid` 和 `uid` 组合。如果存在,则不再插入。
- 你可以在 `source/module/forum/forum_misc.php` 文件中找到相关的插入逻辑,并在插入之前添加一个检查。
例如:
$exists = C::t('forum_hotreply_member')->fetch_by_tid_uid($tid, $uid);
if (!$exists) {
C::t('forum_hotreply_member')->insert(array(
'tid' => $tid,
'pid' => $pid,
'uid' => $uid,
'attitude' => $attitude
));
}
2. **使用 `INSERT IGNORE`**:
- 如果你希望忽略重复插入的错误,可以使用 `INSERT IGNORE` 语句。这样,如果插入的记录已经存在,MySQL 会忽略该错误,而不会抛出 `1062` 错误。
例如:
DB::query("INSERT IGNORE INTO ".DB::table('forum_hotreply_member')." SET `tid`='$tid', `pid`='$pid', `uid`='$uid', `attitude`='$attitude'");
3. **使用 `ON DUPLICATE KEY UPDATE`**:
- 如果你希望在插入时遇到重复键时更新现有记录,可以使用 `ON DUPLICATE KEY UPDATE` 语句。
例如:
DB::query("INSERT INTO ".DB::table('forum_hotreply_member')." SET `tid`='$tid', `pid`='$pid', `uid`='$uid', `attitude`='$attitude' ON DUPLICATE KEY UPDATE `attitude`='$attitude'");
4. **前端限制**:
- 在前端页面中,可以通过 JavaScript 禁用“支持”按钮,防止用户多次点击。
### 总结:
你可以通过检查插入逻辑、使用 `INSERT IGNORE` 或 `ON DUPLICATE KEY UPDATE` 语句来解决 `1062` 错误。同时,前端也可以做一些限制,防止用户多次提交相同的数据。
如果你需要进一步的帮助,欢迎随时联系我,或者访问 DZ插件网(https://www.dz-x.net/)获取更多技术支持。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]