IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Types d'erreur lors de la connexion


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 151
    Points : 154
    Points
    154
    Par défaut Types d'erreur lors de la connexion
    Bonjour,

    Je suis en faire de faire un installeur pour une interface d'administration générique.

    Sur la page où l'utilisateur doit rentrer ses informations de connexion pour la base de données, je fais une requête Ajax dans laquelle j'essaye de me connecter avec les valeurs qu'il a rentrées, et je renvoie un message d'erreur ou de réussite en conséquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $dsn = 'mysql:dbname='.$_POST['db_name'].';host='.$_POST['db_host'];
     
    try{
        $conn = new PDO($dsn, $_POST['db_user'], $_POST['db_pwd']);
    }catch(PDOException $e){
        $message = $e->getMessage();
        /* traitement des erreurs */
    }
    Je sais qu'avec l'extension MySQL, je pouvais connaitre le type d'erreur en fonction du numéro d'erreur qu'il me renvoyait (avec mysql_errno), et donc savoir si c'est le nom d'hôte qui est invalide, ou le nom de base, ...
    Le problème, c'est que je ne vois pas comment faire de même avec PDO. J'avais essayé avec $e->getCode(), mais il renvoie toujours 0, donc ça ne m'avance pas à grand chose.
    J'avais pensé éventuellement analyser la chaine $e->getMessage() : si elle contient 'Unknown MySQL server ...', je renvoie 'Nom d'hôte incorrect', ..., mais je trouve cette solution pas vraiment propre.
    Si quelqu'un a une autre solution, ça m'aiderait bien.

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Février 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Février 2008
    Messages : 71
    Points : 117
    Points
    117
    Par défaut
    Hello,

    A priori, la réponse est dans la doc...

    En effet, par défaut, PDO est en mode silencieux (probablement pour éviter de divulguer trop d'infos sur la connexion en cas d'erreur en production). Pour changer cela, tu peux utiliser un code du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
     
      $dbh = new PDO( $dsn,$login,$pass );
      $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
     
    ?>
    Tu devrais avoir une exception beaucoup plus complète (mais attention, en prod, un seul message d'erreur non récupéré, et tu risques de voir ton login/mdp de BDD affichés).

    Plus d'infos par

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 151
    Points : 154
    Points
    154
    Par défaut
    Merci pour ta réponse.

    J'avais bien pensé à cette méthode au début, mais le problème dans ce cas, c'est d'avoir une exception complète dans le cas où la connexion ne peut pas se faire.
    A ce moment là, $dbh est nul, donc on ne peut pas faire de $dbh->setAttribute( /* ... */ );

Discussions similaires

  1. erreur lors d'une connexion a une base sql server
    Par kifouillou dans le forum JDBC
    Réponses: 16
    Dernier message: 14/05/2013, 12h52
  2. Erreur lors d'une connexion ODBC
    Par habasque dans le forum Oracle
    Réponses: 1
    Dernier message: 16/11/2006, 19h12
  3. Réponses: 28
    Dernier message: 28/07/2005, 14h12
  4. [JSP] erreur lors d'une connexion à mySQL
    Par Jovial dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 31/08/2004, 16h48
  5. Erreur lors de la connexion
    Par mathll65 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2004, 17h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo