因此,出于某种原因,我需要检查密码是否应该更改。因为我使用变量来判断它是真还是假。
$query = "UPDATE c_users SET ";
$query .= ($changepass) ? "user_pass = '$password', " : '' . "user_email = '$email', user_role = $role, display_name = '$nick', WHERE ID = $id";
echo $query . "<br>";
如果($changepass)
为false并且我打印它,这可以正常工作:
UPDATE c_users SET user_email ='example@example.com',user_role = 3,display_name ='ROBOT',vip_status = 1 WHERE ID = 550
但如果($changepass)
为真,则无法按预期工作。它应该将user_pass = '$password',
附加到语句的其余部分,而是打印出来:
UPDATE c_users SET user_pass ='$ 2y $ 10 $ l1TylEhM2oz4WdmlwWkcaupjpj1tt / HCyn7XGWbep1judDQb3E7e。',
注意到该陈述的其余部分缺失。所以查询失败。如何解决?
答案 0 :(得分:1)
那是因为你的三元有效:
if ($changepass) {
$query .= "user_pass = '$password', ";
} else {
$query .= '' . "user_email = '$email', user_role = $role, display_name = '$nick', WHERE ID = $id";
}
因此,如果set
为真,它永远不会附加额外的$changepass
值
要实现你想要的,你需要做
$query .= ($changepass) ? "user_pass = '$password', " : '';
$query .= "user_email = '$email', user_role = $role, display_name = '$nick', WHERE ID = $id";
但你真的应该进入21世纪并在2015年使用带有绑定变量的预备语句