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?
La méthode execute()
renvoie une boolean
... alors faites ceci
if ($stmt->execute()) {
// it worked
} else {
// it didn't
}
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.
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 () - RetourneTRUE
en cas de succès ouFALSE
en cas d'échec.
execute () - RetourneTRUE
en cas de succès ouFALSE
en cas d'échec.
close () - RetourneTRUE
en cas de succès ouFALSE
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);
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();
}
Autre moyen:
if ($stmt->error){
echo "Error";
}
else{
echo "Ok";
}