簡體   English   中英

PHP的條件級聯不起作用

[英]php conditional concatenation doesn't work

因此由於某種原因,我需要檢查密碼是否應該更改。 為此,我使用一個變量來查看它是對還是錯。

$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並且我將其打印出來,則此方法可以正常工作:

更新c_users SET user_email ='example@example.com',user_role = 3,display_name ='ROBOT',vip_status = 1 WHERE ID = 550

但是,如果($changepass)為true,則無法正常工作。 它應該將user_pass = '$password',附加到語句的其余部分,但是它將打印以下內容:

UPDATE c_users SET user_pass ='$ 2y $ 10 $ l1TylEhM2oz4WdmlwWkcaupjpj1tt / HCyn7XGWbep1judDQb3E7e。',

請注意,該語句的其余部分丟失了。 因此查詢失敗。 如何解決?

那是因為您的三元實際上是:

if ($changepass) {
    $query .= "user_pass = '$password', ";
} else {
    $query .= '' . "user_email = '$email', user_role = $role, display_name = '$nick', WHERE ID = $id";
}

因此,如果$changepass為true,則永遠不會追加其他set

要實現您想要的目標,您需要做

$query .= ($changepass) ? "user_pass = '$password', " : '';
$query .= "user_email = '$email', user_role = $role, display_name = '$nick', WHERE ID = $id";

但是您真的應該進入21世紀,並在2015年使用帶有綁定變量的准備好的語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM