2013-01-08 1 views
0

내 액세스 데이터베이스 연결을위한 클래스를 만들고 레코드 세트를 반환 한 다음 MoveNext()를 사용하여 RS를 반복합니다.PHP 클래스가 레코드 세트를 반환 할 수 있습니까?

class AccessDBConnection 
{ 
private $db; 
private $sql; 

function __construct($db, $sql) { 

    $conn = new COM('ADODB.Connection') or exit('Cannot start ADO.'); 
    $conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db"); 

    $rs = $conn->Execute($sql); 
    return $rs; 

} 

사용 :

function testclass() { 
    $rs = new AccessDBConnection("e:\database.mdb", "SELECT StudentID, UserName FROM MyTable WHERE StudentID = 'BJxxxx'"); 

    while (!$rs->EOF) { 
     $SID = $rs->Fields['StudentID']->Value; 
     $UN = $rs->Fields['UserName']->Value; 
      echo $SID . " -- CLASS TEST -- " . $UN . "<br>"; 
       $rs->MoveNext(); 
    } 
} 
+0

가능할지라도 이것은 나쁜 관행으로 간주됩니다. 어쩌면 당신이 찾고있는 어떤 정적 범위 또는 싱글 톤 접근 무엇입니까? – Daniel

답변

3

당신은 생성자에서 결과 집합을 반환 할 수 없습니다.

getRS과 같이 몇 가지 분리 된 메소드를 작성하면 리턴됩니다.

class AccessDBConnection 
{ 
    private $conn; 

    public function __construct($db) { 

     $this->conn = new COM('ADODB.Connection') or exit('Cannot start ADO.'); 
     $this->conn->Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db"); 

    } 

    public function query($sql) { 

     return $this->conn->Execute($sql); 

    } 

} 

사용법 :

function testclass() { 
    $db = new AccessDBConnection("e:\database.mdb"); 
    $rs = $db->query("SELECT StudentID, UserName FROM MyTable WHERE StudentID = 'BJxxxx'"); 

    while (!$rs->EOF) { 
     $SID = $rs->Fields['StudentID']->Value; 
     $UN = $rs->Fields['UserName']->Value; 
      echo $SID . " -- CLASS TEST -- " . $UN . "<br>"; 
       $rs->MoveNext(); 
    } 
} 
+0

결과보다는 연결에 더 사용하고 싶습니까? 나는 당신의 요지를보고, 배열이나 다른 레코드 세트가 아닌 다른 것으로 반환해야 할 것입니다 ... – BarclayVision

+0

고마워요, 한 가지 문제가 있습니다. PHP : 치명적인 오류 : 멤버 함수 호출 Execute() E : \ ... 안에있는 객체가 아닙니다'return $ conn-> Execute ($ sql);' – BarclayVision

+0

내 대답을 편집했습니다. – hsz

2

생성자는 반환하지 않습니다. 따라서 전화 :

$rs = new AccessDBConnection($db, $sql); 

레코드 집합을 생성하지 않습니다.

일부 일반 포인터 :

  • 쉽게 테스트는
  • 가 연결
  • 방법을 만들기를 수행 public function connect()와 유사한 방법을 만들고 여기에 와야 만들기 위해 귀하의 __construct에 거의 수행 쿼리를 수행하고 레코드 세트를 반환합니다.

다리 작업을 이미 완료 한 래퍼 클래스를 찾으십시오. 휠을 다시 쓰는 데는 아무런 의미가 없습니다.

+0

PHP가 Access Database를 사용하는 곳을 찾아내는 것은 어려운 일입니다 ... 그래서 당신의 말은 내가 __construct가 아닌 RS를 반환 할 수 있습니까? – BarclayVision

+0

수정하십시오. 근본적으로 mysql_ 함수를 사용하여 자신 만의 버전을 만들 수 있습니다. 빠른 Google은 몇 가지 결과를 보여주었습니다. 사용할 수있는 것을 바탕으로 결과를 얻을 수있었습니다. – cloakedninjas

관련 문제