8791 sujets

Développement web côté serveur, CMS

Salut à vous !

Si je fais un try...catch autour de ma connexion et que je fais exprès de foirer ma connexion (ex. mauvais identifiant, mauvais nom de DB, etc.), l'erreur est bien attrappée !
try {
	$db_mysql = new PDO($dsn, $user, $password);
} catch(PDOException $e) {
	exit('Connexion échouée : '.$e->getMessage());
}

Si je fais un try...catch autour de l'exécution de ma requête et que je fais exprès de foirer la syntaxe de ma requête (ex. nom de champ ou de table inexistant, mauvaise instruction, etc.), l'erreur n'est pas attrapée !
try {
	$query = "SELECT blabla FROM blibli";
	$result = $db_mysql->query($query);
} catch(PDOException $e) {
	exit('Mauvaise syntaxe SQL : '.$e->getMessage());
}

Par contre : si je rajoute la ligne suivante alors l'erreur est correctement attrapée !
$db_mysql->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Ce qui est curieux, c'est que dans mon premier exemple, l'erreur est attrapée sans cette ligne ci-dessus...

Comment est-ce possible ?
Bon, d'après la documentation officielle, il faut explicitement déclarer si l'on veut le rapport d'erreur et les exceptions ou non... Ma première exception fonctionne sans la méthode setAttribute car elle ne porte pas sur PDO mais sur une tentative de connexion à l'aide de PDO. Tandis que ma deuxième exception porte bien sur une manipulation effectuée à l'aide de PDO d'où la nécessité d'appeler la méthode setAttribute !

Question idiote mais ces paramètres peuvent-ils être défini dans le php.ini ?