我正在尝试为我的访问数据库连接创建一个类并返回一个记录集,然后使用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();
}
}
答案 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()
的方法或者找一个已经完成了工作的包装类。重写轮子没有任何意义。