将PDO结果集转换为对象数组

时间:2015-09-16 17:15:58

标签: php object pdo crud

家伙! 我有一个名为Product的

的php类
class Product {

   $id;
   $name;

}

另一个从数据库中获取数据的类:

// DATA GET CLASS //使用PDO OBJECT ..

$stm = $this->dsn->prepare($sql);

$stm->execute();

$rst = $stm->fetchAll(PDO::FETCH_ASSOC);

如何将此PDO结果集($ rst)转换为对象数组Product?

在页面/类之间传输数据的速度是否很快?

5 个答案:

答案 0 :(得分:2)

使用PDO::FETCH_CLASS参数。

class Product {
    public $id;
    public $name;
}

$stm = $this->dsn->prepare($sql);
$stm->execute();

$result = $stm->fetchAll( PDO::FETCH_CLASS, "Product" );

http://php.net/manual/en/pdostatement.fetchall.php

答案 1 :(得分:0)

在这种情况下,我的方法是在Product类中使用一个辅助函数来构建对象的新实例,并在PDO提供输入的情况下返回它。

public static function buildFromPDO($data) {
    $product = new Product();
    $product->id = $data["id"];
    $product->name = $data["name"];

    return $product;
}

然后在PDO调用内部,循环返回并array_push到包含通过此函数构建的所有产品的数组。

$products = array();
foreach ($rst as $r) {
    array_push($products, Product::buildFromPDO($r));
}

如果你似乎要做很多这样的事情,你也可以考虑使用ORM。

答案 2 :(得分:0)

你必须写一个方法来做到这一点。

class Product {
   $id;
   $name;
   public function loadData($data){
      $this->id = $data['id'];
      $this->name = $data['name'];
   }
}

$Product = new Product();
$Product->loadData($database_results);

或者,如果您要为每个对象执行此操作,请使用构造函数..

class Product {
   $id;
   $name;
   public function __construct($id, $pdo){
      $pdo->prepare("select * from table where id = :id");
      // do your query, then...
      $this->id = $data['id'];
      $this->name = $data['name'];
   }
}

$Product = new Product($id, $pdo);

答案 3 :(得分:0)

只需更改您调用fetchAll()

的方式
$rst = $stm->fetchAll(PDO::FETCH_CLASS, 'Product');
  

在页面/类之间传输数据的速度是否很快?

这个问题对我来说听起来不太清楚。你想转移什么?在哪里?

答案 4 :(得分:0)

您可以使用构造函数参数(http://php.net/manual/en/pdostatement.fetchall.php

$result = $stm->fetchAll( PDO::FETCH_CLASS, "Product", array('id','name'));

注意:属性必须是公开的