Php 基于pdo的静态认证方法
我一直在转换一些更基本的脚本,因此它们开始使用PDO,而我似乎无法让我的静态身份验证方法工作。我已经让它工作,但它不是静态的 以下是采用非静态身份验证方法的相关代码:Php 基于pdo的静态认证方法,php,authentication,pdo,Php,Authentication,Pdo,我一直在转换一些更基本的脚本,因此它们开始使用PDO,而我似乎无法让我的静态身份验证方法工作。我已经让它工作,但它不是静态的 以下是采用非静态身份验证方法的相关代码: private $dbh; public function __construct() { $this->dbh = new PDO("mysql:host=localhost;dbname=carmen", 'root', ''); $this->dbh->setAttribute(PDO::
private $dbh;
public function __construct()
{
$this->dbh = new PDO("mysql:host=localhost;dbname=carmen", 'root', '');
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function authenticate($username="", $password="")
{
$sql = "SELECT * FROM user ";
$sql .= "WHERE username = :username ";
$sql .= "AND pass = :password ";
$sql .= "LIMIT 1";
$stmt = $this->dbh->prepare($sql);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return !empty($result) ? true : false;
}
当我试图声明mehthod static时,我在解决方案中的尝试通常在sql语句后的第一行遇到问题。我猜它必须处理$dbh在课程开始时被声明为私有的问题 您的问题是,一旦转换为静态方法,
$this->dbh
将无法工作
如果您想使此方法成为静态的,可能最简单的方法是将PDO对象作为参数传递给函数
相反,您可以将
$dbh
声明为静态变量,然后使用self::$dbh
访问它,但还必须添加一些方法来初始化它(可能是另一个静态方法),而不是构造函数。静态函数无法访问$this
指针。在这种情况下,这毫无意义
一些解决办法是:
- 保持功能非静态,或
- 将$dbh句柄设为静态。然后,您可能会用某种静态init函数替换构造函数,或者
- 将$dbh句柄传递给需要它的静态函数