可以让PHP类返回记录集

时间:2013-01-08 14:28:28

标签: php class ms-access

我正在尝试为我的访问数据库连接创建一个类并返回一个记录集,然后使用MoveNext()遍历RS。

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

2 个答案:

答案 0 :(得分: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(); 
    }
}

答案 1 :(得分:2)

构造函数不返回。所以打电话:

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

不会产生记录集。

一些一般性指示:

  • 在你的__construct中做很少的事情,以便在你找到它时更容易进行测试
  • 创建类似于执行连接的public function connect()的方法
  • 创建执行查询并返回记录集的方法。

或者找一个已经完成了工作的包装类。重写轮子没有任何意义。