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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    Membre expérimenté

    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
    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
    Membre averti
    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
    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
    Membre expérimenté

    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
    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
    Membre averti
    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
    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 émérite

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Il faut changer les 3 petits points dans les parenthèses de PDO() par quelque chose...

+ 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