2017-03-16 25 views
0

我試圖爲我的網站創建一個登錄帳戶系統,當用戶註冊時,我檢查數據庫中是否已有帳戶。我創建了一個名爲「check_user_exists」這裏的功能是爲爲什麼我的sql準備語句沒有給出正確的響應?

function check_account_exists($username, $conn){ 
    if($stmt = $conn->prepare("SELECT * FROM users WHERE username=?")){ 
     $stmt->bind_param('s', $username); 
     $stmt->execute(); 
     echo $stmt->num_rows; 
     if($stmt->num_rows == 1){ 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
     //couldn't prepare statement 
     return false; 
    } 
} 

代碼然而,當我去運行,這甚至每一次當我知道在數據庫中的值已經存在,則返回false。在此之前,我還沒有任何MySQL錯誤,但我檢查了錯誤日誌,並且沒有顯示任何錯誤。我加了echo stmt->num_rows;,但總是輸出0.發生什麼事了?

+0

我測試$ stmt是否準備正確,而不是如果$ stmt的值等於sql的準備。 – blendy

+2

@ arif_suhail_123在PHP中,你可以聲明變量裏面的if語句 – JapanGuy

+0

@ arif_suhail_123它很混亂,但它實踐了很多 – JapanGuy

回答

1

好吧,事實證明我需要使用$stmt->store_result();$stmt->execute();這是防止正確的答覆。

+0

Ohhh ..對,我不自覺地認爲結果被緩衝了,但實際上結果在你做之前可能無法訪問。謝謝你提醒我永遠不要承擔任何事情! –

+0

@FélixGagnon-Grenier這個人真的讓我感到困惑,直到我做了更多的研究,並將這一行代碼放到我的其他函數login_check中並修復它。因爲我100%肯定SQL代碼是正確的,並且該數據庫表中有該行。我甚至檢查了phpMyAdmin,並顯示該行。奇怪你需要這樣做,但它是有道理的。感謝您的時間和快速回復。 – blendy