将 PDO 结果集转换为对象数组
Convert PDO resultset to array of objects
我有一个 PHP class 叫做产品:
class Product {
$id;
$name;
}
另一个从数据库获取数据的class:
$stm = $this->dsn->prepare($sql);
$stm->execute();
$rst = $stm->fetchAll(PDO::FETCH_ASSOC);
如何将此 PDO 结果集 ($rst) 转换为对象数组 Product?
在这种情况下,我的方法是在产品 class 中使用辅助函数来构建对象的新实例,并且 return 它提供来自 PDO 的输入。
比如
public static function buildFromPDO($data) {
$product = new Product();
$product->id = $data["id"];
$product->name = $data["name"];
return $product;
}
然后在您的 PDO 调用中,循环遍历 return 和 array_push
到包含您通过此函数构建的所有产品的数组。
$products = array();
foreach ($rst as $r) {
array_push($products, Product::buildFromPDO($r));
}
如果您似乎要进行大量此类操作,您可能还需要考虑使用 ORM。
你必须写一个方法来做。
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);
只需更改调用 fetchAll() 的方式
$rst = $stm->fetchAll(PDO::FETCH_CLASS, 'Product');
使用 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)
$result = $stm->fetchAll( PDO::FETCH_CLASS, "Product", array('id','name'));
注意:属性必须是public
我有一个 PHP class 叫做产品:
class Product {
$id;
$name;
}
另一个从数据库获取数据的class:
$stm = $this->dsn->prepare($sql);
$stm->execute();
$rst = $stm->fetchAll(PDO::FETCH_ASSOC);
如何将此 PDO 结果集 ($rst) 转换为对象数组 Product?
在这种情况下,我的方法是在产品 class 中使用辅助函数来构建对象的新实例,并且 return 它提供来自 PDO 的输入。
比如
public static function buildFromPDO($data) {
$product = new Product();
$product->id = $data["id"];
$product->name = $data["name"];
return $product;
}
然后在您的 PDO 调用中,循环遍历 return 和 array_push
到包含您通过此函数构建的所有产品的数组。
$products = array();
foreach ($rst as $r) {
array_push($products, Product::buildFromPDO($r));
}
如果您似乎要进行大量此类操作,您可能还需要考虑使用 ORM。
你必须写一个方法来做。
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);
只需更改调用 fetchAll() 的方式
$rst = $stm->fetchAll(PDO::FETCH_CLASS, 'Product');
使用 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)
$result = $stm->fetchAll( PDO::FETCH_CLASS, "Product", array('id','name'));
注意:属性必须是public