PHP登录验证不适用于预准备语句

时间:2015-10-24 21:22:35

标签: php mysql mysqli phpmyadmin

当此代码运行时,它会返回一条错误消息,指出登录失败。 当password_verify函数未运行时,特定错误消息在else语句中,并使用var_dump函数返回以下错误消息。似乎问题在于准备好的语句,因为输入的登录变量似乎没有从数据库中收集信息。

登录失败:(0)array(0){}

任何帮助将不胜感激,请找到下面的代码。

 error_reporting(E_ALL);

  $mysqli = new mysqli ('localhost', 'root', 'root', 'myTable');

  if($mysqli->connect_errno > 0) {
 die('Unable to connect to database [' . $mysqli->connect_error . ']');
 }
     ob_start();
     session_start();

 if(isset($_POST['LogIn'])) {

$username = $_POST['userName'];
$password = $_POST['password'];

if(!($stmt = $mysqli->prepare("SELECT Username, Password FROM user WHERE Username = ?"))){
        echo "Prepare failed: (" . $mysqli->errno . ")" . $mysqli->error;
}




if(!$stmt->bind_param('s', $username)){
    echo "Bind failed: (" . $stmt->errno . ")" . $stmt->error;
}

if(!$stmt->execute()){
 echo "Execute failed: (" . $stmt->errno .")" . $stmt->error;
}

$userdata = $stmt->get_result();
$row = $userdata->fetch_array(MYSQLI_ASSOC);



$stmt->bind_result($username, $password);
$stmt->store_result();

         if(password_verify($password, $row['Password'])){
             session_start();
        $_SESSION['UserID'] = $row['UserID'];
        var_dump($_SESSION);
      //  header('Location: Account.php');
         exit();
    } 


else{
    echo "Login Failed: (" . $stmt->errno .")" . $stmt->error;
    echo "Password's do not match";
    var_dump($_SESSION);
}
 $stmt->close();

}

    $mysqli->close();

1 个答案:

答案 0 :(得分:0)

这可能就是你要找的东西。

if(isset($_POST['LogIn'])) {

    $UN = $_POST['userName'];
    $PW = $_POST['password'];
    //write sql to check for email or username
    $userOrEmailQuery = ("SELECT * from user where Username=? or Email=? LIMIT 1");
    $stmt = $con->prepare($userOrEmailQuery);
    $stmt->bind_param('ss', $UN, $UN);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();  
    if(password_verify($PW, $row['Password'])) {

    session_start();

     $_SESSION["UserID"] = $row['UserID'];

     header( 'Location: Account.php' );

       } else {
           session_start();
           $_SESSION['LogInFail'] = "Yes";
       }

   }

希望这有帮助。