撰寫 PHP 登入功能時,無論輸入何種帳號密碼,系統皆顯示「登入成功」。資料庫連線正常,但驗證邏輯失效。
// 錯誤寫法
if ($result = $check_query) {
// 登入成功邏輯
}
此處使用了賦值運算子 = 而非比較運算子。$result = $check_query 會將查詢結果資源賦值給 $result,並回傳該資源。在 PHP 中,非空資源視為 true,導致條件永為真。
// 修正 1:直接判斷查詢結果資源
if ($check_query) {
// 登入成功
}
// 修正 2:檢查是否有資料列回傳 (mysqli 範例)
if (mysqli_num_rows($check_query) > 0) {
// 登入成功
}
// 修正 3:PDO 範例
if ($stmt->rowCount() > 0) {
// 登入成功
}
password_hash() 加密儲存,驗證時用 password_verify()。