Обрабатывать ошибку для повторяющихся записей - PHP MySQL - PullRequest
25 голосов
/ 30 июня 2010

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

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

Ответы [ 5 ]

47 голосов
/ 30 июня 2010

Чтобы проверить эту конкретную ошибку, вам нужно найти код ошибки .Это 1062 для дубликата ключа.Затем используйте результат из errno() для сравнения с:

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

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

3 голосов
/ 30 июня 2010

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

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

if (!$result) {
    echo "Enter a different value";
} else {
    echo "Save successful.";
}
2 голосов
/ 13 августа 2017

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

  $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
1 голос
/ 30 июня 2010

С функцией mysql_error () http://php.net/manual/en/function.mysql-error.php

0 голосов
/ 21 июня 2017

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

$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062){
    echo 'Duplicate key';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...