2010-06-30 9 views
23

Mam formularz PHP, który wprowadza dane do mojej bazy danych MySQL. Mój klucz podstawowy jest jedną z wprowadzonych przez użytkownika wartości. Kiedy użytkownik wprowadzi wartość, która już istnieje w tabeli, zwracany jest błąd MySQL "Powielona pozycja" wprowadzona wartość "dla klucza 1". Zamiast tego błędu, chciałbym ostrzec użytkownika, że ​​należy wprowadzić inną wartość. Tylko echo wiadomości lub coś. Chyba moje pytanie sprowadza się do tego: jak włączyć konkretny błąd MySQL do wiadomości PHP DziękiBłąd obsługi duplikatów - PHP MySQL

edit: poniżej odpowiedź nickf jest ładny, ale czy jest jakiś sposób, aby rozróżniać poszczególnych błędów?

Odpowiedz

45

Aby sprawdzić ten konkretny błąd, musisz znaleźć error code. To jest 1062 dla duplikatu klucza. Następnie użyć wynik z errno() porównać z:

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

notatkę o stylu programowania
Zawsze należy starać się unikać stosowania magic numbers (wiem, że to ja go wprowadzić w tej odpowiedzi). Zamiast tego można przypisać znany kod błędu (1062) do stałej (na przykład MYSQL_CODE_DUPLICATE_KEY). Ułatwi to zachowanie kodu, ponieważ stan w oświadczeniu if jest nadal czytelny w ciągu kilku miesięcy, kiedy znaczenie 1062 zniknęło z pamięci :)

+1

Tak, to dobra uwaga. To nie działało jednak ... czy na pewno 1022 to właściwy kod błędu? Zacznę też szukać. Dzięki – RobHardgood

+0

Ah, to jest "1062", zob. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_dup_entry. Odpisze odpowiedź. – jensgram

+0

Tak, właśnie to znalazłem: D Włożyłem go i zadziałało idealnie. Dzięki jensgram, po prostu rozwiązanie, którego szukałem! – RobHardgood

3

Można sprawdzić wartość zwracana z mysql_query kiedy zrobić wkładkę.

+0

Aha, widziałem to już wcześniej, a to na pewno wygląda dobrze. dzięki nickf! – RobHardgood

+0

Właściwie czy istnieje sposób sprawdzenia, czy jest to konkretny błąd? – RobHardgood

+0

Yep - 'mysql_errno()' zwróci kod błędu ostatniego błędu. Z góry mojej głowy, nie wiem, co to jest kod, ale możesz to po prostu sprawdzić w gałęzi '(! $ Result)'. – nickf

0

Funkcja zwraca numer błędu w postaci mysql_errno(). Numer błędu dla duplikatów kluczy jest 1062. np

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

wypróbować ten kod do obsługi zduplikowane wpisy i pokazać echa wiadomość:

$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