为什么我的 PHP 代码不更新 SQL


Why isnt My PHP code updating SQL

>有谁知道为什么这个PHP代码不更新列pictures它会更新其余的列,但不会更新图片列,而是更新用户信息 所以电子邮件地址,密码和图片 我对PHP很陌生,所以我真的不知道在寻找错误时要寻找什么

    <?php 
    require("common.php"); 
    if(empty($_SESSION['user'])) 
    { 
        header("Location: login.php"); 
        die("Redirecting to login.php"); 
    } 
    if(!empty($_POST)) 
    { 
        if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) 
        { 
            die("Invalid E-Mail Address"); 
        } 
        if($_POST['email'] != $_SESSION['user']['email']['picture']) 
        { 
            $query = " 
                SELECT 
                    1 
                FROM users 
                WHERE 
                    email = :email
                    picture = :picture
            "; 
            $query_params = array( 
                ':email' => $_POST['email'] 
            ); 
            try 
            { 
                $stmt = $db->prepare($query); 
                $result = $stmt->execute($query_params); 
            } 
            catch(PDOException $ex) 
            { 
                die("Failed to run query: " . $ex->getMessage()); 
            } 
            $row = $stmt->fetch(); 
            if($row) 
            { 
                die("This E-Mail address is already in use"); 
            } 
        } 
        if(!empty($_POST['password'])) 
        { 
            $salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
            $password = hash('sha256', $_POST['password'] . $salt); 
            for($round = 0; $round < 65536; $round++) 
            { 
                $password = hash('sha256', $password . $salt); 
            } 
        } 
        else 
        { 
            $password = null; 
            $salt = null; 
        } 
        $query_params = array( 
            ':email' => $_POST['email'], 
            ':user_id' => $_SESSION['user']['id'], 
            ':picture' => $_POST['picture'], 
        ); 
        if($password !== null) 
        { 
            $query_params[':password'] = $password; 
            $query_params[':salt'] = $salt; 
        } 
        $query = " 
            UPDATE users 
            SET 
                email = :email 
                picture = :picture
        "; 
        if($password !== null) 
        { 
            $query .= " 
                , password = :password 
                , salt = :salt 
            "; 
        } 
        $query .= " 
            WHERE 
                id = :user_id 
        "; 
        try 
        { 
            // Execute the query 
            $stmt = $db->prepare($query); 
            $result = $stmt->execute($query_params); 
        } 
        catch(PDOException $ex) 
        { 
            die("Failed to run query: " . $ex->getMessage()); 
        } 
        $_SESSION['user']['email']['picture'] = $_POST['email']; 
        header("Location: private.php"); 
        die("Redirecting to private.php"); 
    } 
?> 

您缺少, .

$query = " 
    UPDATE users 
    SET 
        email = :email 
        picture = :picture
";

您需要将其更改为

$query = " 
    UPDATE users 
    SET 
        email = :email, 
        picture = :picture
";

您在 UPDATE 语句中缺少 :email 之后的逗号。

$query = " 
            UPDATE users 
            SET 
                email = :email 
                picture = :picture
        "; 

应该是

$query = " 
        UPDATE users 
        SET 
            email = :email,  
            picture = :picture
    "; 

编辑:除此之外,您在第一个查询中还缺少一个参数:

        $query = " 
            SELECT 
                1 
            FROM users 
            WHERE 
                email = :email
                picture = :picture
        "; 
        $query_params = array( 
            ':email' => $_POST['email'] 
        ); 

请注意,您只在查询参数中应用 :email,但您的查询同时需要 :email 和 :p icture。

您需要从$query中删除picture = :picture或将':picture' => $_POST['picture']添加到$query_params