我是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 !";
}
}
?>
答案 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();
}
}
}