2009-04-13 16 views
9

Quindi sto configurando un programma di installazione per la mia app Web e disponiamo di campi di input per le credenziali del database. Parte del mio processo di convalida comprende testare la connessione al database (usando la libreria PDO di PHP). Se la connessione non riesce, voglio essere in grado di distinguere tra password errata, indirizzo errato, nome del database inesistente, ecc. In modo che possa fare riferimento al campo di input corretto nel modulo.Possibili errori PDOException (MySQL 5)?

Può qualcuno indicarmi un riferimento che delinea i possibili codici di errore/messaggi restituiti con un PDOException?

Modifica: Mi è venuto in mente che questi codici/messaggi di errore sono probabilmente specifici del database e che i codici/errori del database nativo potrebbero semplicemente essere passati. Se questo è il caso, al momento sto lavorando solo con i database MySQL 5.

risposta

14

La documentazione MySQL è il riferimento completo per error codes.

I codici di errore a partire da 1000 sono server errors. Tra questi 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: banca dati Unknown '% s'

codici di errore a partire da 2000 sono client errors. Tra questi errori come:

  • Errore: 2005 (CR_UNKNOWN_HOST) Messaggio: Unknown MySQL server host '% s' (% d)

  • Errore: 2003 (CR_CONN_HOST_ERROR) Messaggio: Impossibile connettersi al server MySQL su '% s' (% d)

non ho intenzione di elencare tutti i possibili errori, perché sono già documentate, e non so quali è necessario 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 del semplice messaggio PDOException.


Re i suoi commenti su getCode() - No, non sembra essere supportato in questo modo. Ho fatto un test rapido, a var_dump() a 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 della classe Exception di base, a partire dalla versione di PHP 5.1.0. È compito dell'implementazione del relativo driver PDO utilizzare questo campo oggetto. Almeno per il driver MySQL, apparentemente non l'hanno fatto.

+2

PDOException :: getCode() restituisce lo stesso codice di PDO :: errorCode()? – Wilco

+0

Secondo http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code il metodo 'PDO-> getCode()' dovrebbe restituire il codice di errore SQLSTATE. –

-7

io non sono sicuro di PDO, ma è possibile utilizzare la funzione mysql_error() che restituisce qualcosa di simile:

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

È quindi possibile visualizzare questi errori direttamente all'utente, o giocare per ottenere una lista di tutti gli errori possibili e determinare direttamente la causa dell'errore.

Problemi correlati