2011-03-11 3 views
1

필자는 필자의 기본 스크립트 중 일부를 PDO를 사용하기 시작하면서 변환하여 정적 인증 메소드를 작동시킬 수없는 것으로 보입니다. 그래도 정적이 아닌 작업을 할 수있게되었습니다.pdo로 정적 인증 메소드

Heres는 비 정적을 인증 방법과와 관계있는 코드 : 정적 mehthod를 선언 할 때 일반적으로 SQL 문 후 첫 번째 줄에서 문제로 실행하는 솔루션에

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; 
} 

내 시도. 클래스의 시작 부분에서 $ dbh를 private로 선언해야한다고 생각합니다.

답변

0

정적 방법으로 변환하면 $this->dbh은 작동하지 않습니다.

이 메서드를 정적으로 만들려면 PDO 개체를 함수의 매개 변수로 전달하는 것이 가장 쉽습니다.

대신 $dbh을 정적 변수로 선언 한 다음 self::$dbh으로 액세스 할 수 있지만 생성자 대신 초기화 방법 (다른 정적 메서드)을 추가해야 할 수도 있습니다.

0

정적 함수는 $this 포인터에 액세스 할 수 없습니다. 그것은 그 맥락에서 말이되지 않습니다.

일부 솔루션은 다음과 같습니다

  • 는 비 정적 기능을 유지, 또는

  • 는 $ DBH 정적 처리합니다. 그런 다음 생성자를 일종의 정적 초기화 함수로 바꿀 수 있습니다. 또는

  • $ dbh 핸들을 필요한 정적 함수에 전달하십시오.

전체 디자인을 다시 방문해야 할 수도 있습니다.

관련 문제