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 :

Gestion des erreurs, affichage de la requête [PDO]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Gestion des erreurs, affichage de la requête
    Salut,

    Je passe de mysql_ à pdo et j'aimerais pouvoir afficher une erreur lorsqu'une requête ne passe pas et aussi afficher cette requête...
    Alors j'ai vu l'utilisation du try/catch() mais je vois également dans la doc :
    - PDO::errorInfo() - Retourne les informations associées à l'erreur lors de la dernière opération sur la base de données
    - PDOStatement::errorCode() - Récupère le SQLSTATE associé lors de la dernière opération sur la requête
    - PDOStatement::errorInfo() - Récupère les informations sur l'erreur associée lors de la dernière opération sur la requête

    Cependant je n'arrive pas à utiliser ces méthodes...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $c = new PDO(...);
    $result = $c->prepare('SELECT * FROM mauvaisetable');
    $result->execute();
    if (!$result)
    {
       echo "\nPDO::errorInfo():\n";
       print_r($c->errorInfo());
    }
    cela ne me retourne rien de particulier malgré l'erreur volontaire sur le nom de la table...pourtant c'est dans la doc..ou c'est moi qui l'utilise mal ?

    - J'aimerais savoir si je peux afficher une erreur sql lisiblement sans try/catch() ? (un peu à la manière d'un mysql_error())
    - J'aimerais savoir si je peux afficher ma requête (bonne ou mauvaise) après exécution afin de la relire...

    Merci pour votre aide

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Le code devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ret = $result->execute();
    if (!$ret) // à moins d'écrire directement : if (!$result->execute()) {
    {
       echo "\nPDO::errorInfo():\n";
       print_r($result->errorInfo());
    }
    A défaut d'utiliser les exceptions, c'est la valeur (booléenne) retournée par execute, ici, qu'il faut tester. Non, l'objet PDOStatement déjà obtenu.

    Concernant errorInfo, pour une requête préparée, c'est l'objet PDOStatement, et non PDO, qui doit servir de référent. Dixit la doc :
    PDO::errorInfo() retourne uniquement les informations des erreurs pour les opérations exécutées directement sur un gestionnaire de base de données. Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorInfo() ne retournera pas l'erreur depuis le gestionnaire de requête. Vous devez appeler la fonction PDOStatement::errorInfo() pour retourner les informations sur l'erreur pour une opération exécutée sur un gestionnaire de requête particulier.
    (avec une gestion d'erreurs basée sur les exceptions, ce point n'a plus besoin d'être considéré)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ok pour cette réponse,

    Cependant quand j'essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $c = new PDO(...);
    $result = $c->prepare('SELECT * FROM mauvaisetable');
    if (!$result->execute())
    {
       echo "\nPDO::errorInfo():\n";
       print_r($result->PDOStatement::errorInfo());
    }
    j'obtiens l'erreur suivante : Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

    il n'y a donc rien de plus simple qu'un try/catch pour afficher une erreur ??
    Comment s'utilise ce fameux "errorInfo()" ?
    Le mystère reste entier pour afficher la requête exécuté dans le navigateur...

    Si quelqu'un à des infos, je suis preneur

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Relisez le code que j'avais corrigé (les corrections sont en gras)

    $c : votre objet PDO.
    $result : l'objet PDOStatement correspondant à votre requête.


    Quant à la gestion des erreurs, chacun fait comme bon lui semble (exceptions, avec ou sans try - set_exception_handler, ou non). Tout dépend des besoins et de ce qui paraît le moins "lourd".

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $c = new PDO(...);
    $result  = $c->prepare('SELECT * FROM mauvaisetable');
    $ret = $result->execute();
    if (!$ret)
    {
       echo "\nPDO::errorInfo():\n";
       print_r($result->errorInfo());
    }
    Avec ca tel quel, même en recopiant-collant scrupuleusement : rien ne s'affiche à par une fatall error

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Il faut changer les 3 petits points dans les parenthèses de PDO() par quelque chose...
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    LOL merci c'est ma connexion j'ai mis "..." pour abréger et éviter d'inscrire 'localhost', pseudo, mdp etc ... sinon le reste du code n'aurait pas fonctionner du tout lol.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    fais un try...catch sur ta connexion :
    http://www.php.net/manual/fr/pdo.construct.php

    et active la gestion des erreurs :
    http://php.net/manual/fr/pdo.error-handling.php

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Citation Envoyé par pomme06 Voir le message
    LOL merci c'est ma connexion j'ai mis "..." pour abréger et éviter d'inscrire 'localhost', pseudo, mdp etc ... sinon le reste du code n'aurait pas fonctionner du tout lol.
    pardon, je t'ai pris au mot quand tu écrivais "tel quel"
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Okay merci ça fonctionne mieux !!!
    et je suis gourmand, mais auriez-vous une idée pour afficher la requête après exécution ??

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    On peut récupérer le SQL de la requête préparée via l'attribut queryString (associé éventuellement à la méthode debugDumpParams).

    Sinon il faut passer par une surcharge de PDOStatement notamment (de ce genre) ou le profiler (du moins pour MySQL).

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Ok merci à vous tous ! sujet résolu !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-SEVER2005] Gestion des erreurs pour les requêtes
    Par eagleleader dans le forum MS SQL Server
    Réponses: 22
    Dernier message: 16/10/2007, 09h59
  2. Gestion des erreurs dans une requête "IF"
    Par tineighty dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/10/2007, 18h22
  3. Réponses: 5
    Dernier message: 11/09/2007, 13h42
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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