PDO et une erreur de requête

Signaler
-
 Utilisateur anonyme -
Hello,

M'initiant actuellement à PDO avec MySQL, je me pose la question suivante : y a t'il une gestion des erreur en PDO comme avec mysql_query ? Lorsque je fais une erreur dans ma requête avec mysql_query, j'ai une erreur php qui me dis que j'ai une erreur dans ma requête. Avec PDO par contre, j'ai une erreur 500 sans explication. Doit-on passer par un try/catch ?

D'avance merci pour votre aide :-)

Belle soirée,

A++

5 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Re,

j'ai une erreur 500 sans explication

humm ... c'est à dire ? quelle est l'erreur complète ?

Avec PDO tu peux paramétrer le mode de fonctionnement des erreurs avec setAttribute (cf PDO::ATTR_ERRMODE)

Vois également les méthodes errorCode() et errorInfo()

Cordialement,



Kohntark -
Re :)

Autant pour moi, ce n'est plus une erreur 500 que j'ai mais aucun résultat qui s'affiche tout simplement.
Lorsque je fais une erreur dans ma requête MySQL, je n'ai rien qui s'affiche. J'aimerais avoir un message d'erreur à la place :-)

Je regarde ton lien sur setAttribute

A++
Ok,

j'ai bien rajouté la ligne ci-dessous juste après ma connexion à ma base de donnée MySQL.

$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


Pour pouvoir avoir un message d'erreur lors d'un problème dans une de mes requête MySQL, je suis donc obligé quand même de mettre un bloc try/catch comme ceci : ?

try{
    $resultats = $connexion->query("SELECT * FROM membres ORDER BY id ASC"); 
    $resultats->setFetchMode(PDO::FETCH_ASSOC); 
}
catch (Exception $e)
{
    die('Erreur : ' . $e->getMessage());
}
while( $ligne = $resultats->fetch() ) // on récupère la liste des membres
{
        echo 'Nom : '.$ligne->nom.'
'; 
}
$resultats->closeCursor(); // on ferme le curseur des résultats


A++
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
27
Si tu lèves une exception et que tu veux l'attraper oui.
Si tu ne le fais pas elle s'affichera en "exception non attrapée", à condition bien sur que l'affichage des erreurs soit activé.

Tu peux également définir un gestionnaire d'erreurs / exception personnalisé.

Cordialement,

Kohntark -
Merci pour ta réponse :-)

Qu'est ce qu'une exception non attrapée ? Sont-elles visibles quelque part ?

En ce qui concerne pour erreur 500, j'ai pu la reproduire.
Si je n'utilise pas de try/catch et que j'exécute cette requête :

$resultats = $connexion->query("SELECT * FROM membres WHERE id=".$_GET["id"]." ORDER BY id ASC");


Si dans mon get je demande volontairement : ?id='1. Il m'affiche une erreur 500. Est-ce normal ?

A++