Mysql Ошибка при регистрации

Wladim

Новичок
Здравствуйте.
Извините, если не в тему: не нашел куда...

В результате регистрации выводится ошибка:
Invalid query: Duplicate entry '1' for key 'PRIMARY'
Не могу понять, что это значит?
 

Andkorol

Новичок
Значения поля, для которого установлен primary key, должны быть уникальными.
Ошибка говорит о том, что при добавлении новой записи происходит попытка добавления в это поле НЕ уникального значения (в таблице уже есть значение '1' в этом поле).
 

Wladim

Новичок
ID для поля avtor_key формируется автоматически, поскольку установлен для него AUTO_INCREMENT
Для какого тогда поля с PRIMARY KEY требуется установка AUTO_INCREMENT и правильно ли это?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
формировать id через автоинкремент- правильно.
Ошибка говорит о том, что автоинкремента все таки на этом поле нет, или он был сдвинут, например.
 
  • Like
Реакции: WMix

hell0w0rd

Продвинутый новичок
Да давай сразу SSH сюда, чего мелочиться. Ну и жесть же в коде.
Я попросил сам запрос.
 

Wladim

Новичок
PHP:
// СОЗДАНИЕ ЗАПИСИ О ПРОЕКТЕ В ТАБЛИЦЕ z_avtors
$zapros_1="INSERT LOW_PRIORITY INTO z_avtors (fam,avt_name,otch,loga,passw,passw2,proj_name,proj_contss,proj_contssss,eml,aeml,about,data)
VALUES ('$fam','$avt_name','$otch','$loga','$passw','$passw2','$proj_name','$proj_contss','$proj_contssss','$eml','$aeml','$about','$data')";
$result_1=mysql_query($zapros_1);
if (!$result_1) die('Invalid query: '.mysql_error());

// СОЗДАНИЕ Location Number
$zapros_2="SELECT prim_key FROM z_avtors WHERE loga='$loga' AND passw2='$passw2'";
$result_2=mysql_query($zapros_2);
if (!$result_2) die('Invalid query: '.mysql_error());

// $avtor_key = mysql_result($result, 0);
$avtor_key = set_zero_avto($avtor_key,$DLIN_KEY); // Дополнить цифру нулями слева
$data = date('Ymd');
$loc_num = $data.$avtor_key;

// СОЗДАНИЕ ЗАПИСИ О ПРОЕКТЕ В ТАБЛИЦЕ z_anketa.
$for_key = 0;
$status = 0; 
$zapros_3="INSERT LOW_PRIORITY INTO z_anketa (avtor_key,fam,avt_name,otch,loga,passw,passw2,site,proj_name,proj_contss,proj_contssss,eml,aeml,cat,loc_num,mini_img,for_key,keystring,status,timestamp,data)
VALUES ('$avtor_key','$fam','$avt_name','$otch','$loga','$passw','$passw2','$site','$proj_name','$proj_contss','$proj_contssss','$eml','$aeml','$cat','$loc_num','$mini_img','$for_key','$keystring','$status','$timestamp','$data')";
$result_3=mysql_query($zapros_3);
if (!$result_3) die('Invalid query: '.mysql_error());
 

Wladim

Новичок
Первичный ключ должен содержать уникальные значения.
Первичный ключ не может содержать NULL значений.
Каждая таблица должна иметь первичный ключ, и каждая таблица может иметь только один первичный ключ.
Всё это у меня выполнено:
-- Структура таблицы `z_anketa`
--

CREATE TABLE `z_anketa` (
`avtor_key` int(11) NOT NULL AUTO_INCREMENT,
`fam` varchar(200) NOT NULL,
`avt_name` varchar(20) NOT NULL,
`otch` varchar(20) NOT NULL,
`loga` varchar(112) NOT NULL,
`passw` varchar(112) NOT NULL,
`passw2` varchar(112) NOT NULL,
`site` varchar(50) NOT NULL,
`proj_name` text NOT NULL,
`proj_contss` text NOT NULL,
`proj_contssss` text NOT NULL,
`eml` varchar(60) NOT NULL,
`aeml` varchar(60) NOT NULL,
`forr_key` varchar(8) NOT NULL,
`cat` varchar(4) NOT NULL,
`razd_kat` varchar(20) NOT NULL,
`loc_num` varchar(16) NOT NULL,
`mini_img` varchar(20) NOT NULL,
`keystring` varchar(20) NOT NULL,
`status` varchar(5) NOT NULL,
`timestamp` varchar(20) NOT NULL,
`data` date NOT NULL,
PRIMARY KEY (`avtor_key`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
 

Andkorol

Новичок
Всё это у меня выполнено:
...
`avtor_key` int(11) NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`avtor_key`)
Для этого поля указан AUTO_INCREMENT – но при этом ты пытаешься в это поле воткнуть какую-то ерунду:
PHP:
// $avtor_key = mysql_result($result, 0);
$avtor_key = set_zero_avto($avtor_key,$DLIN_KEY); // Дополнить цифру нулями слева
...
$zapros_3="INSERT LOW_PRIORITY INTO z_anketa (avtor_key,fam,avt_name,otch,loga,passw,passw2,site,proj_name,proj_contss,proj_contssss,eml,aeml,cat,loc_num,mini_img,for_key,keystring,status,timestamp,data)
VALUES ('$avtor_key','$fam','$avt_name','$otch','$loga','$passw','$passw2','$site','$proj_name','$proj_contss','$proj_contssss','$eml','$aeml','$cat','$loc_num','$mini_img','$for_key','$keystring','$status','$timestamp','$data')";
 

Wladim

Новичок
Для этого поля указан AUTO_INCREMENT – но при этом ты пытаешься в это поле воткнуть какую-то ерунду:
Насколько я понимаю, то "в это поле" я не должен ничего втыкать, а только использовать его значение для создания Location Number в поле loc_num
 
Сверху