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 不更新密码,如果不包括在内的主要内容,如果未能解决你的问题,请参考以下文章