有问题所以,我目前正在尝试为我的浏览器游戏做一个登录表单,这需要多个查询才能正常工作。我首先开始使用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我不得不做回滚到原来的文章,因为你应该作为一个额外的编辑。我会一直低估它,人们会对自己说:*“他们使用占位符,为什么答案?”*。 –