PHP 类可以返回记录集吗
Posted
技术标签:
【中文标题】PHP 类可以返回记录集吗【英文标题】:can a PHP class return a recordset 【发布时间】:2013-01-08 14:28:28 【问题描述】:我正在尝试为我的访问数据库连接创建一个类并返回一个记录集,然后使用 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();
【问题讨论】:
即使有可能,这也会被视为不好的做法。也许您正在寻找的是一些静态范围或单例方法? 【参考方案1】:你不能从构造函数返回你的结果集。
创建一些分离的方法,例如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();
【讨论】:
我想更多地使用它来连接而不是结果?我明白你的意思,我将不得不以数组或记录集以外的其他东西返回它...... 非常感谢,我遇到了一个错误:php 致命错误:在 E:\... 中的非对象上调用成员函数 Execute()...return $conn->Execute($sql);
【参考方案2】:
构造函数不返回。所以调用:
$rs = new AccessDBConnection($db, $sql);
不会产生记录集。
一些通用指针:
在您的__construct
中做的很少,以便在您进行测试时更容易进行测试
创建一个类似于public function connect()
的方法来执行连接
创建用于执行查询和返回记录集的方法。
或者找到一个已经完成工作的包装类。重写***没有意义。
【讨论】:
找到 PHP 使用 Access 数据库的任何地方都是一个挑战......所以你说我可以返回一个 RS,只是不在 __construct 中? 正确。您基本上可以构建自己的版本哦mysql_
函数。一个快速的谷歌出现了几个结果,你可以根据可用的结果。以上是关于PHP 类可以返回记录集吗的主要内容,如果未能解决你的问题,请参考以下文章
使用类模块将可编辑的 ADO 记录集返回到 MS Access 表单