我似乎无法弄清楚如何使用我的查询从数据库中检索行数,每当我运行查询它只返回零,即使它在我的数据库中
$username = $_POST['username'];
$hash = password_verify($password, $passwordcheck);
if($stmt = $conn -> prepare("SELECT username, email, password FROM users WHERE (username = ? OR email = ?) AND password = ?"))
{
$stmt -> bind_param("sss", $username, $username, $hash);
$stmt -> execute();
$stmt -> bind_result($checkedUsername, $checkedEmail, $checkedPassword);
$stmt -> fetch();
$numberofrows = $stmt->num_rows;
$stmt -> close();
}
echo '# rows: '.$numberofrows;
任何人都可以给我任何提示吗?看不到要把它包裹起来,谢谢。
顺便说一句,在此声明之前已经查询过$ hash。
答案 0 :(得分:0)
将此信息发布为社区维基:
在$stmt->store_result();
execute()
答案 1 :(得分:0)
我假设您在存储在数据库中的密码上使用了password_hash()。那么你不应该在搜索条件中使用它。重新散列相同的字符串不会使用password_hash()生成相同的散列,因为每次运行时它将使用不同的SALT,这就是为什么它是推荐的散列工具。
所以你需要做这样的事情
$username = $_POST['username'];
$stmt = $conn->prepare("SELECT username, email, password
FROM users WHERE (username = ? OR email = ?)")
if($stmt) {
$stmt->bind_param("ss", $username, $username);
$stmt->execute();
// As per @fred-ii- comment
$stmt->store_result();
$stmt->bind_result($checkedUsername, $checkedEmail, $checkedPassword);
$stmt->fetch();
echo '# rows: ' . $stmt->num_rows;
if ( password_verify($_POST['password'], $checkedPassword) ) {
// password is correct
} else {
// password is NOT correct
}
$stmt -> close();
}