1062 duplicate entry 1 for key primary


Everything has been working perfectly for years, then decided to upgrade PHP.
Prior PHP v. 5.2.28
Upgraded to PHP v. 5.5 — site completely broken
Downgraded to PHP v. 5.3.29 (unable to downgrade all the way back to 5.2.28)

The error we are getting now is:

1062 - Duplicate entry '1' for key 'PRIMARY'  INSERT INTO products (products_id, products_quantity, products_model, products_image, products_price, products_date_added, products_last_modified, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) VALUES ('1', 100000, 'fonts:  line 1: Abbey.ttf font color: Silver decal type: Windshield Lettering decal option: 3 inch x 33 inch ', '', '10.95', '2015-03-27 7:52:42', '2015-03-27 7:52:42', '', '0.8', '0', '1', '0')  [TEP STOP]   

Open in new window

Table information is

`products_id` INT( 10 ) NOT NULL AUTO_INCREMENT ; 

Open in new window

Last incremental id was 92690. Now it is trying to use id of 1. If I delete id 1, then I get the following error:

Untitled.jpg
Here I believe the code causing the issue:

 // custom designed decal  case 'add_custom' : if ($HTTP_POST_VARS['msg']) { 	 if($HTTP_POST_VARS['customEdit']=='Edit'){ 	  	 $id = tep_edit_custom_in_cart($HTTP_POST_VARS['productID'], $HTTP_POST_VARS['msg'], $HTTP_POST_VARS['msg1'],$HTTP_POST_VARS['msg2'],$HTTP_POST_VARS['msg3'],$HTTP_POST_VARS['msg4'],$HTTP_POST_VARS['msg5'], $HTTP_POST_VARS['font1'], $HTTP_POST_VARS['font2'], $HTTP_POST_VARS['font3'], $HTTP_POST_VARS['font4'], $HTTP_POST_VARS['font5'], $HTTP_POST_VARS['rgbmix'], $HTTP_POST_VARS['effect'], $HTTP_POST_VARS['shadow_direction'], $HTTP_PO.  

['font1'], $HTTP_POST_VARS['font2'], $HTTP_POST_VARS['font3'], $HTTP_POST_VARS['font4'], $HTTP_POST_VARS['font5'], $HTTP_POST_VARS['rgbmix'], $HTTP_POST_VARS['effect'], $HTTP_POST_VARS['shadow_direction'], $HTTP_POST_VARS['rgb_sh'], $HTTP_POST_VARS['rgb_ol'], $HTTP_POST_VARS['decal_type'], $HTTP_POST_VARS['type_option'], $HTTP_POST_VARS['width'], $HTTP_POST_VARS['height']);
$cart->add_cart($id, $HTTP_POST_VARS['id']+$quantity, $HTTP_POST_VARS['id']); // add to cart tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters), 'NONSSL')); }} break; // performed by the 'buy now' button in product listings and review page case 'buy_now' : if (isset($HTTP_GET_VARS['products_id'])) { if (tep_has_product_attributes($HTTP_GET_VARS['products_id'])) { tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id'])); } else { $cart->add_cart($HTTP_GET_VARS['products_id'], $cart->get_quantity($HTTP_GET_VARS['products_id'])+1); } }

Open in new window

www.experts-exchange.com

На днях я переносил один из своих сайтов на новый хостинг и столкнулся с проблемой. Подробно о том, как перенести сайт на другой хостинг я расскажу в одной из следующих статей, а пока расскажу о самой проблеме и ее решении.

Файлы сайта я скопировал быстро, сделал экспорт базы данных со старого хостинга, но при попытке импортировать таблицы в базу на новом хостинге возникла ошибка в My SQL вот такого вида:

Ошибка

SQL-запрос:

— — Дамп данных таблицы rich_blc_instancesINSERT INTO rich_blc_instances (instance_id, link_id, container_id, container_type, link_text, parser_type, container_field, link_context, raw_url) VALUES (1, 1, 1, ‘blogroll’, ‘Документация’, ‘url_field’, ‘link_u.


8216;link_url’, », ‘http://wordpress.org/extend/plugins/’), (5, 5, 5, ‘blogroll’, ‘Темы’, ‘url_field’, ‘link_url’, », ‘http://wordpress.org/extend/themes/’), (6, 6, 6, ‘blogroll’, ‘Обратная связь’, ‘url_field’, ‘link_url’, », ‘http://ru.forums.wordpress.org/forum/20’), (7, 7, 7, ‘blogroll’, ‘Планета WordPr[…]

Ответ MySQL:

#1062 — Duplicate entry ‘1’ for key ‘PRIMARY’

Так как в базах данных я полный чайник, пришлось копаться в интернете в поисках решения. На форумах довольно много записей от людей с подобной проблемой, но нигде нет четкого ответа – сделай вот так и так.

В общих чертах я проблему понял, но вот как ее решить было неясно. На всех форумах, где встречалось описание подобной ошибки, люди писали, что она возникает при попытке добавить записи из одной базы данных в уже существующую другую.


Но я импортировал базу данных в пустые таблицы, более того, таблицы создавались в процессе импорта.

Решил проблему с ошибкой «#1062 — Duplicate entry ‘1’ for key ‘PRIMARY’» следующим образом:

Заменил в таблицах базы данных команду INSERT INTO на REPLACE INTO. В тексте ошибки, который я привел выше вы можете посмотреть в каком месте таблицы располагаются эти слова (выделил жирным).

По умолчанию, с помощью директивы insert база пыталась вставить значения в таблицу, но почему-то, находила дублированный key ‘PRIMARY’ и не могла вставить данные (как она их находила, я так и не разобрался). Директива replace заставила базу заменять данные при совпадении значений, не обращая внимания на прошлые записи.

Заменить эту директиву можно открыв сам файл базы данных с помощью текстового редактора – эта команда стоит перед блоком каждой таблицы. Открываете базу данных в текстовом редакторе, например, Akelpad и меняете все команды INSERT INTO на REPLACE INTO.

В моем же случае, получилось сделать проще – я по новой сделал экспорт таблицы на старом хостинге и в настройках экспорта установил этот самый REPLACE вместо INSERT.

biznessystem.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.