Почему не удаётся пофиксить баг с внесением информации о вложении в базу данных при загрузке медиафайлов?
При загрузке медиафайлов стала появляться следующая ошибка:
Смотрю `debug.log`:
[16-Nov-2023 14:04:07 UTC] WordPress database error Duplicate entry '0' for key 'veposts.PRIMARY' for query INSERT INTO `veposts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-11-16 14:04:07', '2023-11-16 11:04:07', '', '', 'warrior', '', 'inherit', 'attachment', 'open', 'closed', '', 'warrior', '', '', '2023-11-16 14:04:07', '2023-11-16 11:04:07', 0, 0, 'image/jpeg', 'http://mysite.ru/wp-content/uploads/2023/11/warrior-3.jpg') made by wp_ajax_upload_attachment, media_handle_upload, wp_insert_attachment, wp_insert_post |
[16-Nov-2023 14:04:07 UTC] WordPress database error Duplicate entry '0' for key 'veposts.PRIMARY' for query INSERT INTO `veposts` (`post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_content_filtered`, `post_title`, `post_excerpt`, `post_status`, `post_type`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_parent`, `menu_order`, `post_mime_type`, `guid`) VALUES (1, '2023-11-16 14:04:07', '2023-11-16 11:04:07', '', '', 'warrior', '', 'inherit', 'attachment', 'open', 'closed', '', 'warrior', '', '', '2023-11-16 14:04:07', '2023-11-16 11:04:07', 0, 0, 'image/jpeg', 'http://mysite.ru/wp-content/uploads/2023/11/warrior-3.jpg') made by wp_ajax_upload_attachment, media_handle_upload, wp_insert_attachment, wp_insert_post
Захожу в phpMyAdmin и вижу, что поле `ID` в таблице `vr_posts` не автоинкременируется. Ставлю галку в A_I, нажимаю Сохранить и выдаётся ошибка:
Ошибка запроса: #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'veposts.PRIMARY' |
Ошибка запроса: #1062 - ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '1' for key 'veposts.PRIMARY'
WTF?
P.S. 1) Вспоминаю, что сайт копировался на хостинг из локального OpenServer-а. 2) Так же обращаю внимание на то, что в конце ошибки указано: `made by wp_ajax_upload_attachment, media_handle_upload, wp_insert_attachment, wp_insert_post`.
Что это значит? Короче, что делать? Спасибо.
Дополнительно:
сайт копировался на хостинг из локального OpenServer-а.
Ну вот возможно и последствия неправильной миграции
Ответы:
Помогло?
А это?
For those arriving at this question because of the question title (as I did), this solved my problem:
This error can indicate that the table's PRIMARY KEY is not set to AUTO-INCREMENT, (and your insert query did not specify an ID value).
To resolve:
Check that there is a PRIMARY KEY set on your table, and that the PRIMARY KEY is set to AUTO-INCREMENT.
- Правильный ответ будет:
This will happen if the table contains an existing record with an id of 0 (or negative). Updating all existing records to use positive values will allow auto_increment to be set on that column.
Edit: Some people asked how that 0 got in there. For clarification, the MySQL Reference Manual states that "For numeric types, the default is 0, with the exception that for integer or floating-point types declared with the AUTO_INCREMENT attribute, the default is the next value in the sequence." So, if you performed an insert on a table without providing a value for the numeric column before the auto_increment was enabled, then the default 0 would be used during the insert. More details may be found at https://dev.mysql.com/doc/refman/5.0/en/data-type-....
в ID=0 я изменил 0 на последнее число+1 в таблице и вуаля!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Ошибка
Duplicate entry '0' for key 'PRIMARY'при загрузке медиа говорит о том, что WordPress пытается вставить новую запись attachment в таблицу posts, но поле ID почему-то получает значение 0 вместо автоинкремента. Это почти всегда проблема структуры таблицы, а не загрузчика файлов.Проверьте таблицу posts. У неё первичный ключ должен быть
ID, и он обязан иметьAUTO_INCREMENT:SHOW CREATE TABLE veposts;
Нормальный фрагмент должен быть примерно таким:
ID bigint(20) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID)
Если
AUTO_INCREMENTпропал, восстановите его:ALTER TABLE veposts MODIFY ID bigint(20) unsigned NOT NULL AUTO_INCREMENT;
После этого проверьте текущее максимальное значение ID:
SELECT MAX(ID) FROM veposts;
Если нужно, выставьте следующий auto_increment выше максимального:
ALTER TABLE veposts AUTO_INCREMENT = 12345;
Подставьте число больше текущего MAX(ID). Перед ALTER обязательно сделайте дамп базы.
Также убедитесь, что таблица действительно называется с вашим префиксом
veposts, а не была повреждена при переносе/импорте. Такое бывает после некорректного экспорта из phpMyAdmin, ручной правки SQL, смены типа таблицы или восстановления из битого бэкапа.Когда структура исправлена, загрузка медиа снова начнёт создавать attachment-записи с нормальными ID, и ошибка уйдёт.