La documentazione MySQL è il riferimento completo per codici di errore .
I codici di errore che iniziano con 1000 sono errori del server . Questi includono errori come:
-
Errore:1045 SQLSTATE:28000 (
ER_ACCESS_DENIED_ERROR
)Messaggio:accesso negato per l'utente '%s'@'%s' (usando la password:%s) -
Errore:1049 SQLSTATE:42000 (
ER_BAD_DB_ERROR
)Messaggio:database sconosciuto '%s'
I codici di errore a partire dal 2000 sono errori del client . Questi includono errori come:
-
Errore:2005 (
CR_UNKNOWN_HOST
) Messaggio:host server MySQL sconosciuto '%s' (%d) -
Errore:2003 (
CR_CONN_HOST_ERROR
) Messaggio:Impossibile connettersi al server MySQL su '%s' (%d)
Non elencherò tutti i possibili errori, perché sono già documentati e non so quali devi gestire. Ad esempio, gli errori 2001 e 2002 sono specifici delle connessioni socket UNIX, che potrebbero essere irrilevanti per la piattaforma di destinazione.
Non dimenticare di utilizzare PDO::errorCode()
e PDO::errorInfo()
invece della semplice PDOException
messaggio.
Fai il tuo commento su getCode()
-- No, non sembra essere supportato in questo modo. Ho fatto un rapido test su var_dump()
una PDOException
. Sfortunatamente, il suo codice è semplice "0" anche se il codice di errore e SQLSTATE sono inclusi nel messaggio di eccezione.
Exception::getCode()
fa parte dell'Exception
di base classe, a partire dalla versione PHP 5.1.0. Spetta alla rispettiva implementazione del driver PDO utilizzare questo campo oggetto. Almeno per il driver MySQL, a quanto pare non l'hanno fatto.