PDO PHP UPDATE 不更新密码,如果不包括在内

Posted

技术标签:

【中文标题】PDO PHP UPDATE 不更新密码,如果不包括在内【英文标题】:PDO PHP UPDATE don´t update Password if not included 【发布时间】:2022-01-23 07:01:25 【问题描述】:

我有一个更新表单来更新用户信息。在这里,我输入了密码。如果留空,我想不更新数据库中的密码,而是保留已经设置好的密码。

为此我有:

$user_password = inputCleaner($_POST['user_password']);
$user_password_repeat = inputCleaner($_POST['user_password_repeat']);

 // IF filled, check if both match
  if (!empty($user_password) && $user_password != $user_password_repeat) 
        $errors .= "Passwords are not the same." . '<br>';
     elseif (!empty($user_password) && $user_password == $user_password_repeat) 
        $user_password = hash('sha512', $user_password);  
     
 // IF NOT FILLED, leave NULL
     elseif (empty($user_password)) 
        $user_password = '';
    

如果一切正常,我们运行脚本:

 if(!$errors) 

        $statement = $connection -> prepare("
        UPDATE users SET
        
        user_nickname = :user_nickname,
        user_password = COALESCE(NULLIF(:user_password, ''),user_password)
        user_pass
        user_name = :user_name,
        user_last_name = :user_last_name,
        user_email = :user_email,
        user_picture = :user_picture,
        role = :role
        
        WHERE
        
        user_id = :user_id

        ");

        $statement -> execute(array(
            ':user_nickname' => $user_nickname,
            ':user_password' => $user_password,
            ':user_name' => $user_name,
            ':user_last_name' => $user_last_name,
            ':user_email' => $user_email,
            ':user_picture' => $user_picture,
            ':role' => $role,
            ':user_id' => $user_id
        ));

注意我的 inputCleaner() 函数很简单:

function inputCleaner($input) 
    $input = trim($input);
    $input = stripslashes($input);
    $input = htmlspecialchars($input);
    return $input;

这样,密码根本不会更新,也不会更改。

【问题讨论】:

您在UPDATE 查询中有一个额外的user_pass 您在查询中分配给user_password 后缺少逗号。 【参考方案1】:

您可以简单地将:user_password'' 进行比较,而不是将'' 转换为NULL 然后使用COALESCE()

您还遇到了一些语法错误:分配给user_password 后缺少逗号,之后又多了一行user_pass

        $statement = $connection -> prepare("
        UPDATE users SET
        
        user_nickname = :user_nickname,
        user_password = IF(:user_password = '',user_password, :user_password),
        user_name = :user_name,
        user_last_name = :user_last_name,
        user_email = :user_email,
        user_picture = :user_picture,
        role = :role
        
        WHERE
        
        user_id = :user_id

        ");```

【讨论】:

以上是关于PDO PHP UPDATE 不更新密码,如果不包括在内的主要内容,如果未能解决你的问题,请参考以下文章

在mysql PDO中更新后选择行

尝试使用 PDO 连接到错误的数据库时 PHP 不显示错误

PDO 错误/通知中的哈希密码

PHP PDO 事务?

更新选择列表而不刷新 [PDO/PHP/AJAX]

使用 PHP / PDO 更新表迭代数组 [重复]