метод статической аутентификации с помощью pdo - PullRequest
1 голос
/ 11 марта 2011

Я конвертировал некоторые из моих более простых скриптов, чтобы они начали использовать 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;
 }

Мои попытки решения проблемы обычно приводят к проблемам в первой строке после оператора sql при попытке объявить статический метод,Я предполагаю, что это имеет отношение к объявлению $ dbh частным в начале класса.

Ответы [ 2 ]

0 голосов
/ 11 марта 2011

Статические функции не могут получить доступ к указателю $this. Это не имеет смысла в этом контексте.

Некоторые решения:

  • Сохраните функцию нестатической или

  • Сделать дескриптор $ dbh статическим. Вы, вероятно, затем замените конструктор статической функцией инициализации, или

  • Передайте дескриптор $ dbh статическим функциям, которые в этом нуждаются.

Возможно, вам придется пересмотреть ваш общий дизайн.

0 голосов
/ 11 марта 2011

Ваша проблема в том, что после преобразования в статический метод $this->dbh не будет работать.

Если вы хотите сделать этот метод статичным, его, вероятно, будет проще всего простопередать объект PDO в качестве параметра функции.

Вместо этого можно объявить $dbh как статическую переменную, а затем получить к ней доступ с помощью self::$dbh, но затем вам также придется добавитькакой-то способ его инициализации (скорее всего, другой статический метод) вместо конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...