Étant donné que le mode d'erreur le plus recommandé pour l'AOP est ERRMODE_EXCEPTION
, pas de direct execute()
la vérification des résultats ne fonctionnera jamais . Comme l'exécution du code n'atteindra même pas la condition proposée dans les autres réponses.
Ainsi, il y a trois scénarios possibles pour gérer le résultat de l'exécution d'une requête dans PDO :
- Pour raconter le succès, aucune vérification n'est nécessaire. Continuez simplement à suivre le déroulement de votre programme.
- Pour gérer l'erreur inattendue, gardez la même chose - aucun code de traitement immédiat n'est nécessaire. Une exception sera levée dans le cas d'une erreur de base de données, et elle remontera jusqu'au gestionnaire d'erreurs du site qui aboutira finalement à une page d'erreur 500 commune.
- Pour gérer l'erreur attendue, comme une clé primaire dupliquée, et si vous avez un certain scénario pour gérer cette erreur particulière, alors utilisez un fichier de type
try..catch
opérateur.
Pour un utilisateur régulier de PHP, cela semble un peu étrange - comment ça, ne pas vérifier le résultat direct de l'opération ? - mais c'est exactement comme ça que fonctionnent les exceptions - vous vérifiez l'erreur ailleurs. Une fois pour toutes. Extrêmement pratique.
Donc, en résumé : dans un code normal, vous n'avez pas besoin de gérer les erreurs. Gardez simplement votre code tel quel :
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
En cas de succès, il vous le dira, en cas d'erreur, il vous montrera la page d'erreur habituelle que votre application affiche pour une telle occasion.
Seulement dans le cas où vous avez un scénario de manipulation à part rapporter l'erreur, mettez votre déclaration d'insertion dans une try..catch
vérifiez s'il s'agissait de l'erreur attendue et traitez-la ; ou - si l'erreur était différente - relancer l'exception, afin qu'elle puisse être traitée par le gestionnaire d'erreurs du site de manière habituelle. Voici l'exemple de code de mon article sur la gestion des erreurs avec PDO :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
Dans le code ci-dessus, nous vérifions l'erreur particulière pour prendre des mesures et nous relançons l'exception pour toute autre erreur (pas de table par exemple) qui sera signalée au programmeur.
Alors qu'encore une fois - juste pour dire à un utilisateur quelque chose comme "Votre insertion a réussi". aucune condition n'est jamais nécessaire.