【发布时间】:2014-01-14 11:46:22
【问题描述】:
$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' 也是如此。你能提出解决这个问题的方法吗?
【问题讨论】:
-
为什么不使用 COUNT 语句检查是否存在?
SELECT COUNT(*) AS uncnt FROM users WHERE username=?。它与选择用户名本身一样快(然后您基本上将其丢弃)并且在语义上更明确您正在尝试做什么。