$ stmt->execute(): Comment savoir si db insert a réussi?

avec le morceau de code suivant, Comment puis-je savoir que quelque chose a été inséré dans le db?

if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);  
$stmt->execute();           
$stmt->close();                                 
}

je pensais que l'ajout de la ligne suivante aurait fonctionné mais apparemment pas.

if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}  

et puis utilisez le $updatedaded= " N " pour ensuite sauter d'autres morceaux de code plus loin dans la page qui dépendent de la réussite de l'insertion ci-dessus.

des idées?

30
demandé sur cosmicsafari 2012-04-03 14:59:11

5 réponses

execute() la méthode retourne un boolean ... alors fais ceci :

if ($stmt->execute()) { 
   // it worked
} else {
   // it didn't
}
60
répondu ManseUK 2012-04-03 11:02:23

cochez la valeur de retour de $stmt - > execute ()

if(!$stmt->execute()) echo $stmt->error;

Remarque: cette ligne de code ne effectuer le execute() de la commande afin de l'utiliser à la place de votre niveau actuel de $stmt->execute () (et non après.

17
répondu MattP 2012-04-03 11:08:13

il suffit de vérifier les pages de manuel quelle que soit la fonction que vous utilisez:

prepare () - renvoie un objet statement ou FALSE si une erreur s'est produite.

bind_param () - retourne TRUE sur la réussite ou FALSE sur l'échec.

execute () - renvoie TRUE sur la réussite ou FALSE sur l'échec.

close () - retourne TRUE sur le succès ou FALSE sur l'échec.

4
répondu Álvaro González 2012-04-03 11:04:53

si vous voulez dire que vous voulez connaître le nombre de lignes affectées, vous pouvez utiliser rowCount sur le pdo déclaration

$stmt->rowCount();

après exécution;

si vous parlez de la gestion des erreurs, je pense que la meilleure option est de définir le mode errmode pour lancer des exteptions et envelopper tout dans un bloc "essayer/attraper"

try
{
    //----
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
4
répondu mishu 2012-04-03 11:17:27

Autre manière:

if ($stmt->error){
        echo "Error";
    }
    else{
        echo "Ok";
    }
0
répondu Pedro Antônio 2017-08-20 15:49:06