有問題所以,我目前正在嘗試爲我的瀏覽器遊戲做一個登錄表單,這需要多個查詢才能正常工作。我首先開始使用PHP和MySQL查詢的正常程序,但很快發現由於SQL注入而不是最好的方法。與mysqli_stmt(程序風格)
所以,我決定使用stmt,根據stackoverflow,更安全。
我的代碼是比這個大,但我只想把這裏被竊聽(我調試的代碼的其餘部分和其他一切是好的,包括連接到MySQL服務器)
$stmt = mysqli_prepare($conn, "SELECT username FROM users WHERE username='$playername'");
´
//Im pretty sure this is where the bug is
mysqli_stmt_bind_param($stmt, "s", $playername);
//----------------------------------------
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $dbusername);
mysqli_stmt_fetch($stmt);
$row_cnt = mysqli_stmt_num_rows($stmt);
if($row_cnt === 0) {
mysqli_stmt_close($stmt);
$error = true;
$errorid = "There is no player registered with that username.";
echo $errorid;
}
部分
我用數據庫中的用戶名「Syvered」創建了一個條目,這是我目前正在測試的用戶名,並且當試圖在登錄表單上使用該用戶名時(請注意,$ playername是用戶輸入的用戶名)它仍然會說「沒有這樣的用戶使用該用戶名」,這意味着mysqli_stmt_num_rows($ stmt)由於某種原因返回0。這是我不明白的。
我真的很希望我對你已經很清楚,先謝謝你的幫助。
問題我查可惜沒有幫助:
謝謝你的回答!不幸的是,我做了你告訴我的事,但它仍然無法正常工作。我編輯了我的問題的代碼。 – Syvered
@Syvered正如我在我的回答中所說,看到我的答案另一個http://stackoverflow.com/questions/22252904/check-if-row-exists-with-mysql/22253579#22253579哪些工作,基本上做同樣的事情。如果你的工作沒有成功,那麼你的工作就會失敗,你需要檢查錯誤的原因。 –
@Syvered我不得不做回滾到原來的文章,因爲你應該作爲一個額外的編輯。我會一直低估它,人們會對自己說:*「他們使用佔位符,爲什麼答案?」*。 –