我正在尝试通过pdo sqlsrv创建登录

时间:2017-01-03 14:03:24

标签: php sql-server pdo sqlsrv

我是PDO的新手,我尝试获取数据,但每次输入我的详细信息时,我都会收到错误的详细信息错误。我的注册工作非常完美,但是当我输入登录详细信息时,它会向我显示错误的详细信息。我在这里附上代码。 连接文件

class Database {   
    private $host = "*****";
    private $dbname = "*****";
    private $username = "*****";
    private $password = "*****";
    public $conn;

    public function dbConnection() {
        $this->conn = null;    
        try {
            $this->conn = new PDO("sqlsrv:Server=" . $this->host . ";Database=" . $this->dbname, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        } catch(PDOException $exception) {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}

我的班级

require_once('dbconfig.php');

class USER {    
    private $conn;

    public function __construct() {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }


    public function doLogin($uname,$umail,$upass) {
        try {
            $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email,    user_pass FROM cust WHERE user_name=:uname OR user_email=:umail ");
            $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));
            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);
            if($stmt->rowCount() == 1) {
                if(password_verify($upass, $userRow['user_pass'])) {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                } else {
                    return false;
                }
            }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    }
}

致电doLogin()

<?php
   session_start();
   require_once("class.user.php");
   $login = new USER();

   if($login->is_loggedin()!="")
   {
     $login->redirect('services.php');
   }

   if(isset($_POST['btn-login']))
   {
     $uname = strip_tags($_POST['txt_uname_email']);
     $umail = strip_tags($_POST['txt_uname_email']);
     $upass = strip_tags($_POST['txt_password']);

     if($login->doLogin($uname,$umail,$upass))
     {
        $login->redirect('services.php');
     }
     else
     {
       $error = "Wrong Details !";
     }  
  }
?>

1 个答案:

答案 0 :(得分:1)

除非在测试SELECT返回的行数之前运行$stmt->rowCount(),否则store_result()在某些情况下不会返回有效结果。

require_once('dbconfig.php');

class USER {    
    private $conn;

    public function __construct() {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }


    public function doLogin($uname,$umail,$upass) {
        try {
            $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email,user_pass 
                                        FROM cust 
                                        WHERE user_name=:uname 
                                           OR user_email=:umail ");
            $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));

            // new line
            $stmt->store_result();

            if($stmt->rowCount() == 1) {
                // moved inside if as no point reading result unless one exists
                $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

                if(password_verify($upass, $userRow['user_pass'])) {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    }
}

或者你可以做

    public function doLogin($uname,$umail,$upass) {
        try {
            $stmt = $this->conn->prepare("SELECT user_id, user_name, user_email,user_pass 
                                        FROM cust 
                                        WHERE user_name=:uname 
                                           OR user_email=:umail ");
            $stmt->execute(array(':uname'=>$uname, ':umail'=>$umail));

            $userRow=$stmt->fetch(PDO::FETCH_ASSOC);

            if(!empty($userRow)) {

                if(password_verify($upass, $userRow['user_pass'])) {
                    $_SESSION['user_session'] = $userRow['user_id'];
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }
    }
}