php条件连接不起作用

时间:2015-08-11 18:06:20

标签: php

因此,出于某种原因,我需要检查密码是否应该更改。因为我使用变量来判断它是真还是假。

$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。',

注意到该陈述的其余部分缺失。所以查询失败。如何解决?

1 个答案:

答案 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年使用带有绑定变量的预备语句