簡體   English   中英

使用PDO更新表:語法錯誤

[英]Updating table using PDO : Syntax Error

我正在執行一個函數來更改表用戶的密碼,但是我遇到了語法錯誤

這是函數:

 public function changepassword($password, $newpassword) {
        $user_id = $_SESSION["userSession"];
        $stmt = $this->db->prepare("SELECT * FROM user WHERE user_id=:user_id");
        $stmt->execute(array(":user_id" => $user_id));
        $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
        if ($password = $userRow['password']) {
            $sql = "UPDATE user set password=:password WHERE user_id=:user_id";
            $stmt2 = $this->db->query($sql);
            $stmt->execute(array(":user_id" => $user_id, ":password" => $password ));
            $stmt2->execute();
            return true;
        } else {
            return false;
        }
    }

這是函數調用

if (isset($_POST['btn-save'])) {
    $password = $_POST['password'];
    $newpassword = $_POST['newpassword'];
    $newpassword2 = $_POST['newpassword2'];

    if ($newpassword == $newpassword2) {
        if ($user->changepassword($password, $newpassword)) {
            header("Location: selfedit.php?inserted");
        } else {
            header("Location: selfedit.php?failure");
        }
    } else {
        header("Location: selfedit.php?failurematch");
    }
}

這是我得到的錯誤:

致命錯誤:消息為“ SQLSTATE [42000]”的未捕獲的異常“ PDOException”:語法錯誤或訪問沖突:1064 SQL語法有錯誤; 檢查與您的MariaDB服務器版本相對應的手冊以獲取正確的語法,以在C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php:37堆棧跟蹤中的':password WHERE user_id =:user_id'在第1行'附近使用#0 C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php(37):PDO-> query('UPDATE user set ...')#1 C:\\ xampp \\ htdocs \\ aDatabase2 \\ selfedit.php(8 ):USER-> changepassword('fereira','umdois')#2 {main}在第37行的C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php中拋出

編輯1

我根據此問題注釋更改了功能,但得到了另一個錯誤

public function changepassword($password, $newpassword) {
    $user_id = $_SESSION["userSession"];
    $stmt = $this->db->prepare("SELECT * FROM user WHERE user_id=:user_id");
    $stmt->execute(array(":user_id" => $user_id));
    $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($password == $userRow['password']) {
        $sql = "UPDATE user set password=:newpassword WHERE user_id=:user_id";
        $stmt2 = $this->db->prepare($sql);
        $stmt2->execute(array(":user_id" => $user_id, ":password" => $newpassword ));
        return true;
    } else {
        return false;
    }
}

新錯誤:

致命錯誤:C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php:37中堆棧錯誤消息:未捕獲的異常“ PDOException”,消息為“ SQLSTATE [HY093]:無效的參數編號:未定義參數”:堆棧跟蹤:#0 C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php(37):PDOStatement-> execute(Array)#1 C:\\ xampp \\ htdocs \\ aDatabase2 \\ selfedit.php(8):USER-> changepassword('ferreira',' #37 {main}在第37行的C:\\ xampp \\ htdocs \\ aDatabase2 \\ class.user.php中拋出

它通過從EDIT 1更改以下行來工作:

 $sql = "UPDATE user set password=:newpassword WHERE user_id=:user_id";

對此:

$sql = "UPDATE user set password=:newpassword WHERE user_id=:user_id";

最終功能:

public function changepassword($password, $newpassword) {
    $user_id = $_SESSION["userSession"];
    $stmt = $this->db->prepare("SELECT * FROM user WHERE user_id=:user_id");
    $stmt->execute(array(":user_id" => $user_id));
    $userRow = $stmt->fetch(PDO::FETCH_ASSOC);
    if ($password == $userRow['password']) {
        $sql = "UPDATE user set password=:password WHERE user_id=:user_id";
        $stmt2 = $this->db->prepare($sql);
        $stmt2->execute(array(":user_id" => $user_id, ":password" => $newpassword ));
        return true;
    } else {
        return false;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM