Woher weiß ich mit dem folgenden Code, dass etwas in die Datenbank eingefügt wurde?
if ($stmt = $connection->prepare("insert into table (blah) values (?)")) {
$stmt->bind_param("s", $blah);
$stmt->execute();
$stmt->close();
}
Ich hatte gedacht, dass das Hinzufügen der folgenden Zeile funktionieren würde, aber anscheinend nicht.
if($stmt->affected_rows==-1){$updateAdded="N"; echo "failed";}
Und dann verwenden Sie $ updatedAdded = "N", um andere Codeabschnitte weiter unten auf der Seite zu überspringen, die davon abhängig sind, dass die obige Einfügung erfolgreich ist.
Irgendwelche Ideen?
Die Methode execute()
gibt eine boolean
zurück ...
if ($stmt->execute()) {
// it worked
} else {
// it didn't
}
Überprüfen Sie den Rückgabewert von $ stmt-> execute ().
if(!$stmt->execute()) echo $stmt->error;
Beachten Sie, dass die Codezeile den Befehl execute () ausführt, verwenden Sie ihn also anstelle von $ stmt-> execute () und nicht danach.
Überprüfen Sie einfach die Handbuchseiten welche Funktion Sie verwenden:
prepare () - gibt ein Anweisungsobjekt zurück oder
FALSE
, wenn ein Fehler aufgetreten ist.
bind_param () - GibtTRUE
bei Erfolg oderFALSE
bei Fehler zurück.
execute () - GibtTRUE
bei Erfolg oderFALSE
bei Ausfall zurück.
close () - GibtTRUE
bei Erfolg oderFALSE
bei Ausfall zurück.
In der Praxis wird dies jedoch ärgerlich und es ist fehleranfällig. Es ist besser, mysqli so zu konfigurieren, dass Ausnahmen bei Fehlern ausgegeben werden und alle spezifischen Fehlerbehandlungen mit Ausnahme der wenigen Fälle loszuwerden, bei denen ein Fehler erwartet wird (z. B. eine vorläufige Einfügung, die möglicherweise eine eindeutige Einschränkung verletzt):
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
wenn Sie die Anzahl der betroffenen Zeilen wissen möchten, können Sie rowCount in der pdo-Anweisung verwenden.
$stmt->rowCount();
nach der Ausführung;
wenn Sie über Fehlerbehandlung sprechen, denke ich, ist die beste Option, den Errmode so zu setzen, dass er Exteptionen auslöst und alles in einen Try/Catch-Block einschließt
try
{
//----
}
catch(PDOException $e)
{
echo $e->getMessage();
}
Sie können den zurückgegebenen Wert nach der Ausführung überprüfen:
if ($stmt->execute()) {
// ok :-)
$count = $stmt->rowCount();
echo count . ' rows updated properly!';
} else {
// KO :-(
print_r($stmt->errorInfo());
}
Andere Weise:
if ($stmt->error){
echo "Error";
}
else{
echo "Ok";
}