Php rowCount()不适用于SELECT count(*)
我试图学习PDO,所以我通过制作简单的登录脚本进行培训。 但似乎有一个问题,因为我的脚本不起作用 这是我的剧本:Php rowCount()不适用于SELECT count(*),php,mysql,login,pdo,connection,Php,Mysql,Login,Pdo,Connection,我试图学习PDO,所以我通过制作简单的登录脚本进行培训。 但似乎有一个问题,因为我的脚本不起作用 这是我的剧本: if(isset($_POST['Submit'])){ $sql= "SELECT COUNT (*) FROM `managers` WHERE `username` = :username and `password` = :password "; $result = $connection->prepare($sql); $result->
if(isset($_POST['Submit'])){
$sql= "SELECT COUNT (*) FROM `managers` WHERE `username` = :username and `password` = :password ";
$result = $connection->prepare($sql);
$result->bindParam(":username" ,$_POST['username']);
$result->bindParam(":password" ,$_POST['password']);
$result->execute();
$num=$result->rowCount();
if($num > 0){
header("location:index.php");
}else{
header("location:login.php");
}
}
我的HTML表单如下:
<form action="login.php" method="post" enctype="multipart/form-data" name="logform" id="logform" class="form-signin" role="form" >
<h2 class="form-signin-heading">LOGIN HERE</h2>
<input name="username" id="username" size="30" maxlength="64" type="text" class="form-control" placeholder="Enter Your Username ...">
<input name="password" type="password" id="password" size="30" maxlength="24" class="form-control" placeholder="Enter Your Password ...">
<input class="btn" name="Submit" type="submit" value="Login"/>
</form>
无论我做什么,我仍然会使用头文件登录到login.php。
我检查了数据库连接,它正常工作。我不知道是什么问题。你们能帮帮我吗?编辑:原来的答案有点不对劲。您可以在两个位置都使用“:” 此外,如果这个脚本按照您期望的方式工作,那么它将允许任何人登录,而不考虑密码,因为您使用的是COUNT,然后检查返回的行数。计数查询返回的行数将为1。总是1。它将包含一个值,可以是0、1或更多 但是:rowCount不适用于SELECT语句。 示例2计算SELECT语句返回的行数 对于大多数数据库,PDOStatement::rowCount不会返回受SELECT语句影响的行数。相反,请使用PDO::query发出一个SELECT COUNT*语句,该语句的谓词与您想要的SELECT语句相同,然后使用PDOSTATENT::FETCHTCOLUMN检索将返回的行数。然后,应用程序可以执行正确的操作 您需要给计数一个别名,获取它,然后使用它
在数据库中存储普通密码是一个严重的安全缺陷 ,因此,您永远不应该向WHERE子句实际添加密码,而是获取哈希值,然后使用 因此,在用户登录的情况下,仅选择计数的查询根本不适用-您必须选择记录本身 正确的代码取自我的
我很抱歉,但是你说无论我做什么,我仍然要登录到login.php是什么意思?+1喜欢这样的解释对初学者来说非常有用
$sql= "SELECT COUNT (*) AS num FROM `managers` WHERE `username` = :username and `password` = :password ";
$result = $connection->prepare($sql);
$result->bindParam(":username" ,$_POST['username']);
$result->bindParam(":password" ,$_POST['password']);
$result->execute();
$num=$result->fetchColumn();
if($num > 0){
header("location:index.php");
}else{
header("location:login.php");
}
$stmt = $pdo->prepare('SELECT * FROM `managers` WHERE `username` = :username');
$stmt->execute(['username' => $_POST['username']]);
$user = $stmt->fetch();
if ($user && password_verify($_POST['password'], $user['password']))
header("location:index.php");
}else{
header("location:login.php");
}