web-dev-qa-db-de.com

$ stmt-> execute (): Woher wissen Sie, ob die Datenbankeinfügung erfolgreich war?

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?

31
cosmicsafari

Die Methode execute() gibt eine boolean zurück ...

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

Ü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.

20
MattP

Ü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 () - Gibt TRUE bei Erfolg oder FALSE bei Fehler zurück.
execute () - Gibt TRUE bei Erfolg oder FALSE bei Ausfall zurück.
close () - Gibt TRUE bei Erfolg oder FALSE 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);
5

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();
}
4
mishu

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());
}
3
CBEK

Andere Weise:

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