MySQLi准备在登录页面中的语句不起作用

时间:2015-11-30 04:18:01

标签: php mysql mysqli

我终于把我的登录系统从MySQLi改为Prepared语句了。目前我有这个:

<?php
session_start();
require 'settings.php';
if(count($_POST)>0) {
    $user = $_POST['user_name'];
    $pass = $_POST['password'];
   /* Create a new mysqli object with database connection parameters */
   $mysqli = new mysqli($host, $mysql_user, $mysql_pass, $db);

   if(mysqli_connect_errno()) {
  echo "Connection Failed: " . mysqli_connect_errno();
  exit();
   }

   /* Create a prepared statement */
   if($stmt = $mysqli -> prepare("SELECT * FROM members WHERE username=?")) {

  /* Bind parameters
     s - string, b - blob, i - int, etc */
  $stmt -> bind_param("s", $user);

  /* Execute it */
  $stmt -> execute();

  /* Bind results */
  $stmt -> bind_result($id, $username, $password);

  /* Fetch the value */
  $stmt -> fetch();

  $hash = $password;
$passwordcheck = password_verify($pass, $hash);
} 
if($hash == $passwordcheck){
$_SESSION["user_id"] = $id;
$_SESSION["user_name"] = $username;
} else {
$message = "Invalid Username or Password!";
}
  /* Close statement */
  $stmt -> close();
}
if(isset($_SESSION["user_id"])) {
header("Location:dashboard.php");
exit();
}
?>

如果我在其中放入正确的密码和用户名,只是将我带到登录页面,问题是什么。我检查了我的服务器error_log并修复了它出现的错误,但它没有解决问题。我对准备好的陈述很新,并且真的会使用一些帮助。提前谢谢。

如果我回显所有变量,除了初始用户和传递之外都是空的。

另一方面,我的MySQLi结构是这样的:

id | username | password | showtasks | showblog | superuser

1  | Administrator | biglonghash | 1 | 1 | 1

再次感谢。

1 个答案:

答案 0 :(得分:0)

您将$ _POST设置为变量

$user = $_POST['user_name'];
$pass = $_POST['password'];

但是bind_result使用了这个变量

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

用此

替换bind_result
$stmt -> bind_result($id, $user , $pass );