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
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) {
essaye ça juste après l'instanciation de pdo
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);