Étant donné que le mode d'erreur le plus recommandé pour PDO est ERRMODE_EXCEPTION
, aucune execute()
vérification directe des résultats ne fonctionnera jamais . Comme l'exécution du code n'atteindra même pas la condition proposée dans d'autres réponses.
Il existe donc trois scénarios possibles pour gérer le résultat de l'exécution de la requête dans PDO:
- Pour dire le succès, aucune vérification n'est nécessaire. Continuez simplement avec le déroulement de votre programme.
- Pour gérer l'erreur inattendue, continuez avec la même chose - aucun code de traitement immédiat n'est nécessaire. Une exception sera levée en cas d'erreur de base de données, et elle remontera jusqu'au gestionnaire d'erreurs à l'échelle du site qui aboutira finalement à une page d'erreur 500 commune.
- Pour gérer l'erreur attendue, comme une clé primaire en double, et si vous disposez d'un certain scénario pour gérer cette erreur particulière, utilisez un
try..catch
opérateur.
Pour un utilisateur PHP régulier, cela semble un peu étranger - comment faire, ne pas vérifier le résultat direct de l'opération? - mais c'est exactement ainsi que fonctionnent les exceptions - vous vérifiez l'erreur ailleurs. Une fois pour toute. Extrêmement pratique.
Donc, en un mot: dans un code normal, vous n'avez pas du tout besoin de gestion des 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 gestion autre que simplement signaler l'erreur, mettez votre instruction d'insertion dans un try..catch
opérateur, vérifiez s'il s'agit de l'erreur que vous attendiez et gérez-la; ou - si l'erreur était différente - relancez l'exception, pour qu'elle puisse être gérée par le gestionnaire d'erreurs à l'échelle du site de la 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 relançons l'exception pour toute autre erreur (aucune table de ce type par exemple) qui sera signalée à un programmeur.
Encore une fois - juste pour dire à un utilisateur quelque chose comme "Votre insertion a réussi", aucune condition n'est jamais nécessaire.