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