2009-04-13 5 views
9

Je configure donc un programme d'installation pour mon application Web et j'ai des champs de saisie pour les informations d'identification de base de données. Une partie de mon processus de validation consiste à tester la connexion à la base de données (à l'aide de la bibliothèque PDO de PHP). Si la connexion échoue, je veux être en mesure de faire la différence entre un mauvais mot de passe, une mauvaise adresse, un nom de base de données inexistant, etc. afin que je puisse référencer le bon champ de saisie sur le formulaire. Est-ce qu'une personne peut me diriger vers une référence qui décrit les codes/messages d'erreur possibles qui sont retournés avec une exception PDOException?Erreurs PDOException possibles (MySQL 5)?

Modifier: Il m'est apparu que ces codes/messages d'erreur sont probablement spécifiques à la base de données et que les codes/erreurs de base de données natives peuvent simplement être transmis. Si c'est le cas, je ne travaille actuellement qu'avec des bases de données MySQL 5.

Répondre

14

La documentation MySQL est la référence complète pour error codes. Les codes d'erreur commençant à 1000 sont server errors. Ceux-ci comprennent des erreurs telles que:

  • Erreur: 1 045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Message: Accès refusé pour l'utilisateur '% s' @ '% s' (en utilisant le mot de passe:% s)

  • erreur : 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) message: base de données inconnue '% s'

codes d'erreur à partir de 2000 sont client errors. Ceux-ci comprennent des erreurs telles que:

  • Erreur: 2005 (CR_UNKNOWN_HOST) Message: Inconnu hôte du serveur MySQL '% s' (% d)

  • Erreur: 2003 (CR_CONN_HOST_ERROR) Message: Impossible de se connecter serveur MySQL (% d) « % s »

Je ne vais pas énumérer toutes les erreurs possibles, car ils sont déjà documentés, et je ne sais pas quels sont ceux que vous devez gérer. Par exemple, les erreurs 2001 et 2002 sont spécifiques aux connexions de socket UNIX, ce qui peut être sans rapport avec votre plate-forme cible. N'oubliez pas d'utiliser PDO::errorCode() et PDO::errorInfo() au lieu du simple message PDOException.


Re vos commentaires sur getCode() - Non, il ne semble pas être pris en charge de cette façon. J'ai fait un test rapide, à var_dump() un PDOException. Malheureusement, son code est simple "0" même si le code d'erreur et SQLSTATE sont inclus dans le message d'exception.

Exception::getCode() fait partie de la classe de base Exception, à partir de la version PHP 5.1.0. Il appartient à l'implémentation du pilote PDO respectif d'utiliser ce champ objet. Au moins pour le pilote MySQL, ils ne l'ont apparemment pas fait.

+2

Est-ce que PDOException :: getCode() retourne le même code que PDO :: errorCode()? – Wilco

+0

Selon http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code, la méthode 'PDO-> getCode()' doit renvoyer le code d'erreur SQLSTATE. –

-7

Je ne suis pas sûr AOP, mais vous pouvez utiliser la fonction mysql_error() qui retourne quelque chose comme ceci:

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

Vous pouvez ensuite afficher ces erreurs directement à l'utilisateur, ou jouer pour obtenir une liste de toutes les erreurs possibles, et déterminer la cause de l'erreur directement.