PDO PHP UPDATE 如果不包含则不要更新密码

PDO PHP UPDATE don´t update Password if not included

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

为此我有:

$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;
}

有了这个,密码根本就不会更新,不会改变它。

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

您也有一些语法错误:分配给 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

        ");```