php - 无法接收带有密码验证的 mysqli 记录

标签 php mysql mysqli

我刚刚开始使用 php,但我不太擅长。我需要在用户的密码和用户名通过后验证我想与该用户 user_id 启动 session 。但每次我尝试回显 user_id 时,我什么也没得到。希望有人能帮助我解决这个问题。是我的代码:

<?php
 require_once "config.php";
 $username = $_POST['username'];
 $password = $_POST['password'];
 $hash = password_hash($password, PASSWORD_DEFAULT);
 if (strlen($username) > 0 && strlen($hash) > 0){
  $query = "SELECT user_id FROM keep_user WHERE username =    '$username' AND password = '$hash'";
  $result = mysqli_query($conn , $query);
  if($conn->query($query) == TRUE){
     if(password_verify($password, $hash)){
         session_start();
         $_SESSION['user_id'] = $user_id;
         echo $user_id;
         echo "succes";
     }else{
         echo "error-1".$conn->error;
     } 
   }else{
        echo "error-2".$conn->error;
        exit;
   }
 }else{
     echo "error".$conn->error;
     exit;
 }
?>

它确实回显成功,所以我猜这部分很好,但为什么无法检索 user_id?

最佳答案

问题不在于 password_verify 函数。问题出在 mysqli_query 上,因为您执行查询两次

 $result = mysqli_query($conn , $query);// first time
  if($conn->query($query) == TRUE){// second time

只需注释或删除$result = mysqli_query($conn , $query);//第一次

要获取用户 ID 表单查询,您需要将其获取为

if ($result = $conn->query($query)) {
    /* fetch associative array */
    $row = $result->fetch_assoc() ;
    $user_id=$row["user_id"];
    $_SESSION['user_id'] = $user_id;

}

以及页面顶部的 session_start();

您的脚本已打开以进行sql注入(inject)阅读How can I prevent SQL injection in PHP?为了防止它

关于php - 无法接收带有密码验证的 mysqli 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838421/

相关文章:

php - 使用 PHP + mysql 实现(几乎)功能齐全的全文搜索

php - 我从PHP应用程序中收到以下警告,我想知道如何修复它: [duplicate]

MySQL 查询统计用户未读消息

php - 高级 Web 开发教程

php - 在 MySQL 中显示多行

php - mysql不执行where子句中的特殊字符

javascript - 使用下拉列表从 mysql 数据库中获取数据,然后使用搜索功能从选定的下拉列表选项中过滤数据

php - PHP 中的自动加载器 - 一次运行两个

PHP 将 xml 节点从一个文档复制到另一个文档

php - 我正在努力处理我的数据库和查询