2010-06-30 2 views
23

У меня есть PHP-форма, которая вводит данные в мою базу данных MySQL. Мой первичный ключ - это одно из введенных пользователем значений. Когда пользователь вводит значение, которое уже существует в таблице, возвращается ошибка MySQL «Дублирующая запись», введенное значение «для ключа 1». Вместо этой ошибки я хотел бы предупредить пользователя о необходимости вводить другое значение. Просто эхо-сообщение или еще что-то. Я думаю, мой вопрос сводится к: как превратить конкретную ошибку MySQL в сообщение PHP БлагодаряОшибка обработки для повторяющихся записей - PHP MySQL

редактировать: ответ nickf в ниже это хорошо, но есть ли способ различать конкретные ошибки?

ответ

45

Для проверки конкретной ошибки, необходимо учесть, что error code. Это 1062 для дублирующего ключа. Затем используйте результат от errno() для сравнения:

mysql_query('INSERT INTO ...'); 
if (mysql_errno() == 1062) { 
    print 'no way!'; 
} 

замечания о стиле программирования
Вы всегда должны стремиться избегать использования magic numbers (я знаю, что я был один, чтобы ввести его в этом ответе). Вместо этого вы можете присвоить известному коду ошибки (1062) константе (например, MYSQL_CODE_DUPLICATE_KEY). Это облегчит ваш код, чтобы сохранить как условие в if заявлении остается читаемыми в течение нескольких месяцев, когда смысл 1062 исчезло из памяти :)

+1

Да, это хороший момент. Это не сработало, хотя ... вы уверены, что 1022 - правильный код ошибки? Я тоже начну искать. Спасибо – RobHardgood

+0

А, это '1062', ср. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_dup_entry. Будет редактировать ответ. – jensgram

+0

Да, я просто нашел это тоже: D Я подключил его, и он работал отлично. Спасибо jensgram, просто решение, которое я искал! – RobHardgood

3

Вы можете проверить возвращаемое значение из mysql_query, когда вы делаете вставку.

$result = mysql_query("INSERT INTO mytable VALUES ('dupe')"); 

if (!$result) { 
    echo "Enter a different value"; 
} else { 
    echo "Save successful."; 
} 
+0

Ага, я видел это раньше, и это определенно выглядит правильно. спасибо ник! – RobHardgood

+0

На самом деле, есть ли способ проверить, является ли это конкретной ошибкой? – RobHardgood

+0

Yep - 'mysql_errno()' вернет код ошибки последней ошибки. В верхней части моей головы я не знаю, что это за код, но вы можете просто проверить его внутри ветки '(! $ Result). – nickf

0

Используйте mysql_errno() функцию, она возвращает число ошибок. Номер ошибки дублирующихся ключей 1062. например

$query = mysql_query("INSERT INTO table_name SET ...); 
if (mysql_errno() == 1062){ 
    echo 'Duplicate key'; 
} 
0

попробовать этот код для обработки повторяющихся записей и показать эхо-сообщение:

$query = "INSERT INTO ".$table_name." ".$insertdata; 
       if(mysqli_query($conn,$query)){ 
        echo "data inserted into DB<br>";     
       }else{ 
        if(mysqli_errno($conn) == 1062) 
         echo "duplicate entry no need to insert into DB<br>"; 
        else 
        echo "db insertion error:".$query."<br>"; 

       }//else end 
Смежные вопросы