Bonjour,

j'ai besoin d'un petit renseignement SVP.

En fait je n'arrive pas à faire fonctionner Try et Catch, lors d'une requete SQL.

Voici par exemple mon code avec une requete UPDATE:

<?php
try {
    $db = BaseDeDonnee::getPDO();

    // requete SQL pour modifier email de l'utilisateur
    $statement = "UPDATE utilisateurs
              SET email = :marqueur
              WHERE id = :idget
                  LIMIT 1";

    $requete = $db->prepare($statement);

    $requete->bindValue(':marqueur', 'email', PDO::PARAM_STR);
    $requete->bindValue(':idget', $idGet, PDO::PARAM_INT);
    $requete->execute();

    echo 'Les modifications ont bien eu lieu';

    $requete->closeCursor();

}
catch(PDOException $e) {
    echo 'Une erreur est survenue lors de la modification';
}

Si je fait une erreur à UPDATE utilisateurs (pour tester j'ai par exemple fait exprès de faire une erreur de frappe à utilisateurs),

le echo qu'il y a dans le catch ne s'affiche pas.

Quelqu'un peu m'aider?

Merci beaucoup

5 réponses


stephweb
Auteur
Réponse acceptée

Bonjour,
du coup c'est bon sujet résolu.
on m'a conseillé de faire comme ceci dans la class BDD :

                self::$_bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Alerte de type E_WARNING lorsque le SGBD renverra une erreur. Cela te permet de savoir à quelle erreur on a à faire. On a donc une piste de réflexion pour la corriger.
                if (!ini_get('output_buffering')) {
                    ob_start();
                }
                set_exception_handler(
                    function ($e) {
                        ob_end_clean();
                        header('HTTP/1.0 500 Internal Server Error', TRUE, 500);
                       //die('Erreur serveur');
                        $_SESSION['info'] = '<span class="bold rouge">Une erreur est survenue</span>';
                        header('Location: ../../index');
                        exit();
                    }
                );

Merci

Peut-être un problème de namespace
essaye un anti-slash devant PDOException

catch(\PDOException $e) {
stephweb
Auteur

Merci c'est fait, je viens de tester. Et ça ne change rien.
merci

essaye ça juste après l'instanciation de pdo

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

merci de marquer le sujet résolu