2009-04-13 20 views
9

Así que estoy configurando un instalador para mi aplicación web y tengo campos de entrada para las credenciales de la base de datos. Parte de mi proceso de validación incluye probar la conexión de la base de datos (usando la biblioteca PDO de PHP). Si la conexión falla, quiero poder diferenciar entre una contraseña incorrecta, una dirección incorrecta, un nombre de base de datos inexistente, etc. para poder hacer referencia al campo de entrada correcto en el formulario.Posibles errores PDOException (MySQL 5)?

¿Puede alguien indicarme una referencia que describa los posibles códigos de error/mensajes que se devuelven con una excepción PDOException?

Editar: Se me ocurrió que estos códigos/mensajes de error probablemente sean específicos de la base de datos y que los códigos/errores de la base de datos nativa simplemente puedan pasarse. Si este es el caso, actualmente solo estoy trabajando con bases de datos MySQL 5.

Respuesta

14

La documentación de MySQL es la referencia completa para error codes.

Los códigos de error a partir de 1000 son server errors. Estos incluyen errores como:

  • de error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Mensaje: Acceso denegado para el usuario '% s' @ '% s' (usando la contraseña:% s)

  • error 1049: SQLSTATE: 42000 (ER_BAD_DB_ERROR) Mensaje: Desconocido base de datos '% s'

códigos de error a partir de 2000 son client errors. Estos incluyen errores como:

  • de error: 2005 (CR_UNKNOWN_HOST) Mensaje: Desconocido MySQL host del servidor '% s' (% d)

  • de error: 2003 (CR_CONN_HOST_ERROR) Mensaje: No se puede conectar a servidor MySQL en '% s' (% d)

no voy a enumerar todos los errores posibles, porque ya están documentados, y no sé cuáles necesita para manejar. Por ejemplo, los errores 2001 y 2002 son específicos de las conexiones de socket UNIX, que pueden ser irrelevantes para su plataforma de destino.

No olvide utilizar PDO::errorCode() y PDO::errorInfo() en lugar de simplemente el mensaje PDOException.


Re tu comentario sobre getCode() - No, no parece ser apoyado de esa manera. Hice una prueba rápida, a var_dump() a PDOException. Desafortunadamente, su código es simple "0" aunque el código de error y SQLSTATE están incluidos en el mensaje de excepción.

Exception::getCode() es parte de la clase base Exception, a partir de PHP versión 5.1.0. Depende de la implementación del controlador PDO correspondiente utilizar este campo de objeto. Al menos para el controlador MySQL, aparentemente no lo hicieron.

+2

¿PDOException :: getCode() devuelve el mismo código que PDO :: errorCode()? – Wilco

+0

Según http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code, el método 'PDO-> getCode()' debe devolver el código de error SQLSTATE. –

-7

no estoy seguro acerca de DOP, pero se puede utilizar la función mysql_error() que devuelve algo como esto:

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

A continuación, puede mostrar estos errores directamente al usuario, o jugar una vuelta para conseguir una lista de todos los errores posibles, y determine la causa del error directamente.

Cuestiones relacionadas