2009-03-27 4 views
3

J'ai rencontré un problème lors de l'utilisation de PDO car une erreur n'a pas été détectée.Résolution des problèmes PDO: erreur non détectée lors de l'exécution de l'instruction préparée

Le code est simple et fonctionne très bien, je vais juste inclure un échantillon pour éviter toute 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 très bien, mais lorsque l'on travaille sur un nouveau module, je suis tombé sur un problème aucun enregistrement n'a été ajouté ou modifié et aucune erreur n'a été détectée.

$stmt a renvoyé false mais je ne savais pas pourquoi ou comment trouver l'erreur. La solution était simple à la fin, j'utilisais un utilisateur MySQL limité qui n'avait pas d'autorisation d'écriture sur la table. Ces erreurs sont toujours affichées tout de suite en utilisant mysql, mais en utilisant PDO je ne sais pas comment les atteindre.

Comment obtenir PHP/PDO pour afficher ou attraper ce genre d'erreurs de base de données?

Répondre

7

PDO::errorInfo() ou PDOStatement->errorInfo()

En ce qui concerne les exceptions, vérifiez la documentation pour "Errors and error handling" in PDO. Les exceptions ne sont pas lancées par défaut, c'est pourquoi vous pouvez vouloir les activer.

Voir aussi:

+1

Merci, qui me dit exactement ce que je dois savoir. Une autre question cependant, pourquoi l'erreur n'est pas attrapée? – jeroen

+0

Vous avez dit qu'il est retourné faux, cela signifie qu'il a été attrapé ;-) –

+0

Ummmmmmmm, quel est le point d'avoir une déclaration catch alors s'il ne montre pas le message? Je pensais que le but de tout cela était de se débarrasser de ces combinaisons si (succès) d'autre ... – jeroen

Questions connexes