$stmt->execute() : Comment savoir si la db insert a été couronnée de succès?
Avec le morceau de code suivant, comment puis-je savoir que tout ce qui a été inséré dans la db?
if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);
$stmt->execute();
$stmt->close();
}
J'avais pensé à l'ajout de la ligne suivante aurait travaillé mais apparemment pas.
if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}
Et ensuite utiliser le $updatedAdded="N" pour sauter les autres morceaux de code en bas de la page qui dépendent de l'insérer au-dessus de la réussite.
Des idées?
- Ne serait pas
affected_rows
être 0 si rien n'avait été inséré? Bien que si rien n'avait été insérée, elle ne serait vraisemblablement parce queexecute
avait échoué. Avez-vous essayéif ($stmt->affected_rows < 1)
?
Vous devez vous connecter pour publier un commentaire.
La
execute()
méthode retourne unboolean
... donc il suffit de faire ceci :INSERT ... SELECT
pouvait insérer des lignes nulles et de retour avec succès. Dans le cas de l'OP requête...INSERT INTO .. VALUES
... je ne suis pas au courant de tout scénario où la déclaration serait terminée avec succès, sans insertion d'une ligne. (Il est possible que j'ai négligé une possibilité).Vérifier la valeur de retour de $stmt->execute()
Noter que la ligne de code ne effectuer le execute() de la commande afin de l'utiliser à la place de votre niveau actuel de $stmt->execute() pas après.
Il suffit de cocher les pages de manuel quelle que soit la fonction que vous utilisez:
Dans la pratique, cependant, cela devient ennuyeux, et c'est source d'erreurs. Il est préférable de configurer mysqli lancer des exceptions en cas d'erreur et de se débarrasser de tous les traitement spécifique des erreurs, sauf pour les rares occasions où une erreur est prévu (p. ex., une tentative d'insertion qui peut violer une contrainte unique):
si vous voulez dire que vous voulez connaître le nombre de lignes affectées, vous pouvez utiliser nombre de lignes sur le pdo déclaration
après exécution;
si vous parlez d'erreur de manipulation, je pense que la meilleure option est de définir le errmode à jeter exteptions et envelopper le tout dans un bloc try/catch
Vous pouvez vérifier la valeur retournée après l'exécution :
Autre manière: