web-dev-qa-db-fra.com

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

Avec le code suivant, comment puis-je savoir que quelque chose a été inséré dans la base de données?

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

J'avais pensé que l'ajout de la ligne suivante aurait fonctionné mais apparemment pas.

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

Et utilisez ensuite le $ updatedAdded = "N" pour ignorer les autres éléments de code situés plus bas sur la page qui dépendent du succès de l'insertion ci-dessus.

Des idées?

31
cosmicsafari

La méthode execute() renvoie une boolean ... alors faites ceci

if ($stmt->execute()) { 
   // it worked
} else {
   // it didn't
}
65
ManseUK

Vérifiez la valeur de retour de $ stmt-> execute ()

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

Notez que cette ligne de code exécute la commande execute (), donc utilisez-la à la place de votre $ stmt-> execute () actuel et non après.

20
MattP

Il suffit de vérifier les pages de manuel de la fonction que vous utilisez:

prepare () - retourne un objet instruction ou FALSE en cas d'erreur.
bind_param () - Retourne TRUE en cas de succès ou FALSE en cas d'échec.
execute () - Retourne TRUE en cas de succès ou FALSE en cas d'échec.
close () - Retourne TRUE en cas de succès ou FALSE en cas d'échec.

En pratique, cependant, cela devient agaçant et source d’erreurs. Il est préférable de (configurer mysqli pour qu'il lève des exceptions en cas d'erreur } et se débarrasser de toute gestion d'erreur spécifique, sauf dans les rares cas où une erreur est attendue (par exemple, un insert provisoire qui pourrait violer une contrainte unique):

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
5

si vous voulez savoir le nombre de lignes concernées, vous pouvez utiliser rowCount dans l'instruction pdo

$stmt->rowCount();

après exécuter;

si vous parlez de gestion des erreurs, je pense que la meilleure option est de définir le paramètre errmode pour lancer des exteptions et de tout insérer dans un bloc try/catch

try
{
    //----
}
catch(PDOException $e)
{
    echo $e->getMessage();
}
4
mishu

Autre moyen:

if ($stmt->error){
        echo "Error";
    }
    else{
        echo "Ok";
    }
0
Pedro Antônio