MySQL-dokumentationen är den fullständiga referensen för felkoder .
Felkoder som börjar på 1000 är serverfel . Dessa inkluderar fel som:
-
Fel:1045 SQLSTATE:28000 (
ER_ACCESS_DENIED_ERROR)Meddelande:Åtkomst nekad för användare '%s'@'%s' (med lösenord:%s) -
Fel:1049 SQLSTATE:42000 (
ER_BAD_DB_ERROR)Meddelande:Okänd databas '%s'
Felkoder som börjar vid 2000 är klientfel . Dessa inkluderar fel som:
-
Fel:2005 (
CR_UNKNOWN_HOST) Meddelande:Okänd MySQL-servervärd '%s' (%d) -
Fel:2003 (
CR_CONN_HOST_ERROR) Meddelande:Kan inte ansluta till MySQL-servern på '%s' (%d)
Jag tänker inte lista alla möjliga fel, eftersom de redan är dokumenterade, och jag vet inte vilka du behöver hantera. Till exempel är fel 2001 och 2002 specifika för UNIX-socket-anslutningar, vilket kan vara irrelevant för din målplattform.
Glöm inte att använda PDO::errorCode()
och PDO::errorInfo()
istället för bara PDOException meddelande.
Om din kommentar om getCode() -- Nej, det verkar inte stödjas på det sättet. Jag gjorde ett snabbtest för att var_dump() en PDOException . Tyvärr är dess kod enkel "0" även om felkoden och SQLSTATE ingår i undantagsmeddelandet.
Undantag::getCode()
är en del av basen Exception klass, från och med PHP version 5.1.0. Det är upp till respektive PDO-drivrutinimplementering att använda detta objektfält. Åtminstone för MySQL-drivrutinen gjorde de det tydligen inte.