PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: keine Parameter gebunden waren

Ich versuche, ein Formular erstellen, bei der eingereicht wird, aktualisieren einer Datenbank, die enthält die Informationen der Benutzer. Ich bin mit PDO und Transaktionen aber immer die folgende Fehlermeldung, wenn das Formular abgeschickt wird

PHP Warning:  PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in /var/www/html/resources/memfuncs.php on line 75

Hier ist mein code:

Settings.php

if(isset($_POST['username'])){
    $id = $_SESSION['id'];
    $username = $_POST['username'];
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $email = $_POST['email'];
    $password1 = $_POST['password1'];
    $password2 = $_POST['password2'];

    if ($password1 === $password2){
    updatesettings($id, $username, $first_name, $last_name, $email, $password);
    }
}

Ich habe nicht enthalten die HTML für das Formular, obwohl es auch in den oben angegebenen Datei.

memfuncs.php

function updatesettings($id, $username, $first_name, $last_name, $email){
    global $db;

    $db->beginTransaction();

    try {
        //UPDATE USERNAME
        $st2 = $db->prepare("UPDATE users SET username = :username WHERE id = :id");
        $st2->execute();
        $st2->bindParam (":username", $username, PDO::PARAM_STR);
        $st2->bindParam (":id", $id, PDO::PARAM_INT);
        //UPDATE FIRST + LAST NAME
        $st = $db->prepare("UPDATE users SET first_name = :first_name AND last_name = :last_name WHERE id = :id");
        $st->execute();
        $st->bindParam (":first_name", $first_name, PDO::PARAM_STR);
        $st->bindParam (":last_name", $last_name, PDO::PARAM_STR);
        $st->bindParam (":id", $id, PDO::PARAM_INT);
        //UPDATE Email
        $st3 = $db->prepare("UPDATE users SET email = :email WHERE id = :id");
        $st3->execute();
        $st3->bindParam(":email", $email, PDO::PARAM_STR);
        $st3->bindParam(":id", $id, PDO::PARAM_INT);
        //COMMIT CHANGES
        $db->commit();
    } catch (Exception $error){
        $db->rollBack();
        echo "Failed: " . $error->getMessage();
    }

}   

Was mache ich falsch?

  • Die Fehlermeldung sagt dir genau, was du falsch machst. Betrachten Sie die Reihenfolge der prepare,bind und execute Aussagen.
  • Wie @MikeW sagt, execute() sollte durchgeführt werden, nachdem die bindParam für jede "Vorbereitung" - block.
  • FWIW, Sie brauchen nicht drei Abfragen, um drei änderungen in einer Zeile - Sie können es in einer Abfrage. Sie brauchen keine Transaktionen dann, entweder.
InformationsquelleAutor user16174 | 2014-10-13
Schreibe einen Kommentar