Ошибка обработки для повторяющихся записей - PHP MySQL
У меня есть PHP-форма, которая вводит данные в мою базу данных MySQL. Мой первичный ключ - это одно из введенных пользователем значений. Когда пользователь вводит значение, которое уже существует в таблице, возвращается ошибка MySQL "Дублирующая запись", введенное значение "для ключа 1".
Вместо этой ошибки я хотел бы предупредить пользователя о необходимости вводить другое значение. Просто эхо-сообщение или еще что-то.
Думаю, мой вопрос сводится к:
как превратить определенную ошибку MySQL в сообщение PHP
Благодаря
edit: nickf answer below хорошо, но есть ли способ распознать определенные ошибки?
Ответы
Ответ 1
Чтобы проверить эту конкретную ошибку, вам нужно найти код ошибки. 1062
для дублирующего ключа. Затем используйте результат errno()
, чтобы сравнить с:
mysql_query('INSERT INTO ...');
if (mysql_errno() == 1062) {
print 'no way!';
}
Заметка о стиле программирования
Вы всегда должны избегать использования магических чисел (я знаю, именно это я представил в этом ответе). Вместо этого вы можете присвоить известному коду ошибки (1062
) константе (например, MYSQL_CODE_DUPLICATE_KEY
). Это упростит работу вашего кода, так как условие в инструкции if
все еще доступно для чтения за несколько месяцев, когда значение 1062
исчезло из памяти:)
Ответ 2
Вы можете проверить возвращаемое значение из mysql_query
, когда вы вставляете.
$result = mysql_query("INSERT INTO mytable VALUES ('dupe')");
if (!$result) {
echo "Enter a different value";
} else {
echo "Save successful.";
}
Ответ 3
С помощью функции mysql_error()
http://php.net/manual/en/function.mysql-error.php
Ответ 4
Используйте функцию mysql_errno()
, она возвращает номера ошибок. Номер ошибки для дубликатов ключей - 1062.
например
$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062){
echo 'Duplicate key';
}
Ответ 5
попробуйте этот код для обработки повторяющихся записей и покажите эхо-сообщение:
$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