$name = $_GET['user'];
if(isset($_GET['user']) && strlen($_GET['user'])>0) {
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
$stmt = $mysqli->prepare("SELECT username FROM users WHERE username=?");
$stmt->bind_param('s', $name);
$stmt->execute();
while($stmt->fetch()) {
if($stmt->num_rows == 0) {
header("Location: home?errormsg=notfound");
exit();
}
}
$stmt->store_result();
$stmt->close();
}
$mysqli->close();
因此,上面的代码检查$ _GET ['name']是否存在于数据库中,如果不存在,则重定向到home?errormsg = notfound,但是它将数据库中存在的用户名重定向到链接“ home”。 errormsg = notfound”。您能提出解决此问题的方法吗?
你必须调用$stmt->store_result()
之前$stmt->num_rows
。
并且您$stmt->fetch()
没有必要,因为您不使用所选数据。
如果您拨打电话store_result()
后num_rows
无法使用。
手册页的部分评论:
如果您不使用mysqli_stmt_store_result(),并且在执行准备好的语句后立即调用此函数,则该函数通常将返回0,因为它无法知道结果集中有多少行,因为结果集未保存在内存中然而。
因此,您的代码应如下所示:
$name = $_GET['user'];
if(isset($_GET['user']) && strlen($_GET['user'])>0) {
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $db);
$stmt = $mysqli->prepare("SELECT username FROM users WHERE username=?");
$stmt->bind_param('s', $name);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows == 0) {
header("Location: home?errormsg=notfound");
exit();
}
$stmt->close();
}
$mysqli->close();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句