我試圖做一個基本的登錄系統。用戶在表單中,然後發佈和使用下面的代碼輸入用戶名+密碼:處理沒有從準備好的select語句返回的結果
if(isset($_POST['submit'])) {
$sql = "SELECT username, password FROM tbl_users WHERE username = ? AND password = ?";
$stmt = $mysqli->prepare($sql);
if(!$stmt) {
die("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error);
}
$username = $_POST['username'];
$password = $_POST['password'];
var_dump($username);
var_dump($password);
$bind_result = $stmt->bind_param("ss", $username, $password);
if(!$bind_result) {
echo "Binding failed: (" . $stmt->errno . ") " . $stmt->error;
}
$execute_result = $stmt->execute();
if(!$execute_result) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
$stmt->bind_result($returned_username, $returned_password);
while($stmt->fetch()) {
var_dump($returned_username);
var_dump($returned_password);
if($username === $returned_username && $password === $returned_password) {
echo "You are now logged in!";
} else {
echo "Incorrect username or password";
}
}
如果我在正確的用戶名和密碼輸入,一切工作正常並正確記錄英寸當我輸入錯誤的信息時,使用錯誤的密碼或不在數據庫中的用戶名,問題就會出現。 「不正確的用戶名或密碼」行從來沒有工作過。
我是新使用準備好的語句,但我迄今爲止的理解是,一旦我綁定結果,我只能使用fetch在while循環中訪問它們。但是,如果找不到結果,則該循環將永遠不會運行,因此我無法測試查詢是否找到任何結果。我可能在這裏錯過了一些顯而易見的東西,但我一直在努力解決這個問題,它讓我發瘋。
「var_dumps」的輸出是什麼?我認爲,雖然週期也很糟糕。你需要檢查,'SELECT COUNT(*)AS cnt'查詢該行,而沒有while,如果cnt> 0,那麼有一個用戶名稱。如果有用戶使用該用戶名和密碼,這將返回給你任何東西。 – vaso123 2014-10-28 14:06:18