我一直在尝试添加一个简单的“访问”级别检查,但无法获得它来提供数据库中的值,我总是得到Null。即使该查询与“用户通过”检查的查询几乎相同。
无论如何,这是我的代码,您也许可以更好地完成它!
*根据评论更新
public function userLogin() {
$success = false;
try {
$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
$stmt = $con->prepare($sql);
$stmt->bindValue(":username", $this->username, PDO::PARAM_STR);
$stmt->bindValue(":password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR);
// $stmt->bindValue("access", $this->access, PDO::PARAM_INT);
$stmt->execute();
$valid = $stmt->fetchColumn();
if ($valid) {
$success = true;
session_start();
$_SESSION['username'] = $this->username;
}
$con = null;
return $success;
} catch (PDOException $e) {
echo $e->getMessage();
return $success;
}
}
public function auth() {
$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT access FROM users WHERE access = :1 OR access = :2";
$stmt = $con->prepare($sql);
$stmt->bindValue(":access", $this->access, PDO::PARAM_INT);
$stmt->execute();
$access = $stmt->fetchColumn();
if ($access == 1) {
session_start();
$_SESSION['isAdmin'] = $this->access;
} if ($access == 2) {
session_start();
$_SESSION['isUser'] = $this->access;
}
}
我还有一个名为“ headerauth.php”的文件,它是一个小DIV块,其中包含一个Welcome $ _SESSION ['username']可以工作,并且出于测试/开发原因,最后还有一个Var_Dump,它给出了以下结果:
数组
'用户名'=>字符串'测试'(长度= 4)
当我将Auth与userLogin函数放在同一块中时,该值曾经是
空值;
最佳答案
您的代码中至少存在3个错误:
$ stmt-> bindValue> PDOStatement :: bindValue期望第一个参数是整数(对于问号语句参数)或字符串(对于命名参数)。如果使用命名参数,则必须以冒号开头!例如$stmt->bindValue(":username", $this->username, PDO::PARAM_STR);
session_start($ _ SESSION)> session_start不需要任何参数(无效)
$ stmt-> bindValue(“ access”,$ this-> access,PDO :: PARAM_INT)> SQL查询中没有命名参数访问
应该在这里抛出异常。
您是否有一个自定义的异常处理程序/ display_errors off / error_reporting off?我不明白,为什么不抛出异常。
文件:
http://de2.php.net/manual/en/pdostatement.bindvalue.php
http://de2.php.net/manual/en/function.session-start.php