jordane45
Messages postés38288Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention15 novembre 2024
-
Modifié le 28 juin 2022 à 15:00
Par défaut PDO n'affiche pas les différentes erreurs liées au code ou aux requêtes.
Pour les faire apparaitre, vous devez activer l'option lors de la connexion.
<ital>NB: N'oubliez pas de placer le code de connexion à votre BDD dans un fichier à part que vous n'aurez qu'à inclure (via un REQUIRE_ONCE) dans les pages où vous en avez besoin).
NB²: Pensez également à activer l'affichage des erreurs PHP en activant l'option dans le php.ini ou en plaçant, au début de vos scripts PHP la ligne de code suivante :
Pour "trapper" les éventuelles erreurs de code ou de requêtes vous devez utiliser des blocs TRY/CATCH. ( il faut mettre CHAQUE requête dans un bloc try/catch !)
Par exemple :
//préparation de la requête et des variables
$sql = "INSERT INTO matable (champ1,champ2) VALUES (:valeur1,:autrevaleur)";
$datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
NB: le fait de séparer la requête (le contenu de la variable $sql) de son exécution ( le prepare et le execute...) permet d'en faire un echo en cas de besoin. Idem pour les variables (contenues dans $datas).
Autre exemple ( une requête de type "select" )
$email = "test@exemple.fr";
// on prépare la requête et ses variables :
$sql = "SELECT * FROM `users` WHERE email =:email ";
$datas = [':email' => $email];
//Execution de la requete
try {
$requete = $db->prepare($sql);
$requete->execute($datas);
} catch (Exception $e) {
// en cas d'erreur :
echo " Erreur ! " . $e->getMessage();
echo " Les datas : ";
print_r($datas);
}
$result = $requete->fetchAll(); // on stocke le résultat dans un array
Que faire si le message d'erreur concerne un souci dans la requête
C'est un autre sujet ...
mais je peux déjà vous dire qu'il faut impérativement tester vos requêtes DIRECTEMENT dans votre BDD (en passant par exemple par phpmyadmin si vous êtes en mysql ou un logiciel comme heidiSql).
Cela vous permettra de savoir exactement d'où provient l'erreur... un nom de champ ou de table mal orthographié ... un espace oublié ... des quotes manquantes...etc....