如何扩展mySQLI_Result并添加新方法 [英] How to extend mysqli_result and add new method

查看:0
本文介绍了如何扩展mySQLI_Result并添加新方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Mysqli_Result类有fetch_all()方法以行数组(实际上是二维数组,因为行已经是字段数组)的形式从结果集中一次返回多个行。此外,结果集具有以对象形式返回单行的方法fetch_object()

现在,我想扩展mysqli_Result类并添加新方法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;
}

这篇关于如何扩展mySQLI_Result并添加新方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆