Dépannage PDO: Erreur n'est pas pris lors de l'exécution d'une instruction préparée
J'ai couru dans un problème en utilisant PDO car une erreur n'a pas été pris.
Le code est simple et fonctionne très bien, je vais inclure un échantillon afin d'éviter la confusion:
$sql = 'INSERT INTO somedatetable (something)
VALUES (:something)
ON DUPLICATE KEY UPDATE something=:something';
$values = array(":something" => $something);
try {
$stmt = $dbh->prepare($sql);
$stmt->execute($values);
} catch (PDOException $e) {
echo "Error: " . $e->getMessage() . "<br />\n";
}
Le code fonctionne bien, mais lorsque l'on travaille sur un nouveau module, j'ai rencontré un problème qu'aucun enregistrement n'a été ajoutée ou modifiée et aucune erreur n'a été pris.
$stmt
retourné false
mais je n'ai pas la moindre idée de pourquoi ou comment trouver l'erreur.
La solution est simple en fin de compte, j'ai été en utilisant un limitées utilisateur MySQL qui n'a pas d'autorisations en écriture à la table. Ces erreurs de toujours affiché immédiatement lors de l'utilisation de mysql, mais l'utilisation de PDO, je ne sais pas comment l'obtenir.
Comment puis-je obtenir PHP /PDO pour afficher ou de prendre ce genre d'erreurs de base de données?
OriginalL'auteur jeroen | 2009-03-27
Vous devez vous connecter pour publier un commentaire.
PDO::errorInfo()
ouPDOStatement->errorInfo()
Comme pour les exceptions, consultez la documentation pour "les Erreurs et les erreurs de manipulation" en PDO. Les Exceptions ne sont pas jetés par défaut, c'est pourquoi vous pourriez vouloir l'activer.
Voir ainsi:
Vous avez dit qu'il est retourné false, ce qui signifie qu'il a été pris 😉
Ummmmmmmm, quel est l'intérêt d'avoir une instruction catch alors s'il n'affiche pas le message? Je pensais que le but de tout ça était de se débarrasser de ces si (succès) d'autre combinaisons...
Ou est (PDOException $e) tout simplement faux? J'ai attrapé le mal de chose mais je suis en train d'apprendre 🙂
Je suis d'accord. Je n'ai pas de conception, je viens de lire les docs 😉
OriginalL'auteur Ryan Graham