如何扩展mySQLI_Result并添加新方法
Mysqli_Result类有fetch_all()
方法以行数组(实际上是二维数组,因为行已经是字段数组)的形式从结果集中一次返回多个行。此外,结果集具有以对象形式返回单行的方法fetch_object()
。
fetch_objects()
(复数),该方法将返回对象的关联数组,其中关联键是记录ID[id=>Object()]。当然,为了返回扩展的结果集,我还需要扩展mysqli类并覆盖它的Query()方法。但是我不知道mysqli和返回的mysqli_Result之间的连接和查询参数是如何传递的。
这应该是这样工作的:
$db=new ReallyMySQLi(...); //initiating my mysqli
$myrst=$db->query($SQL); //returned my extended result
//fetch_objects() returning associative array of objects
//with record ID as associative key
foreach($myrst->fetch_objects() as $id=>$object)
{
echo 'Customer ID:'.$id; //or $object->id;
echo 'Customer firstname:'.$object->firstname;
echo 'Customer lastname:'.$object->lastname;
}
php>
我在mysqli_result的推荐答案手册中找到了这一点,并对其进行了一些修补。不过我没有试过。
class Database_MySQLi extends MySQLi
{
public function query($query)
{
$this->real_query($query);
return new Database_MySQLi_Result($this);
}
}
class Database_MySQLi_Result extends MySQLi_Result
{
public function fetch_objects()
{
$rows = array();
while($row = $this->fetch_object())
{
$rows[$row->id] = $row;
}
return $rows;
}
}
,用法为
$db=new Database_MySQLi(...); //initiating my mysqli
$myrst=$db->query($SQL); //returned my extended result
//fetch_objects() returning associative array of objects
//with record ID as associative key
foreach($myrst->fetch_objects() as $id=>$object)
{
echo 'Customer ID:'.$id; //or $object->id;
echo 'Customer firstname:'.$object->firstname;
echo 'Customer lastname:'.$object->lastname;
}
相关文章