2011-12-03 33 views
21

Tôi đang viết đơn giản bằng ORM sử dụng PDO của riêng mình. Câu hỏi của tôi là nếu bạn có thể buộc phương pháp PDOStatement::fetchAll() trả về mảng đối tượng của stdClass? Ví dụ:Làm thế nào để buộc PDOStatement-> fetchAll trả về mảng đối tượng?

$result = $q->fetch_all(/* some magic here */); 
print_r($result); 

nên in cái gì đó như:

Array 
(
    [0] => stdClass Object 
     (
      [NAME] => pear 
      [COLOUR] => green 
     ) 

    [1] => stdClass Object 
     (
      [NAME] => watermelon 
      [COLOUR] => pink 
     ) 

) 

là posible này? NAME và COLOR là tất nhiên tên của các cột. Tôi đọc tài liệu nhưng tôi không tìm thấy bất cứ điều gì thú vị.

+0

Tôi không nghĩ rằng bạn đọc tài liệu rõ ràng đủ: "PDO :: FETCH_OBJ: trả về một đối tượng ẩn danh với tên thuộc tính tương ứng với các tên cột trả lại trong kết quả của bạn thiết lập " –

Trả lời

44

Sử dụng $result = $q->fetchAll(PDO::FETCH_OBJ);

+1

Oh của tôi. Tôi nhớ điều này trong tài liệu. Tôi nghĩ rằng đây chỉ là về cấp độ đầu tiên (mảng trong trường hợp của tôi). Cảm ơn. – Elektryk

+1

Không có gì, nhưng PDO có một số chế độ, thậm chí xác định tên của đối tượng được xác định getters, xem PDO :: FETCH_CLASS –

+1

Đó là một thực hành tốt khi trình diễn một tính năng được ghi lại như một lá cờ cho một đối số hàm để thêm liên kết vào trang tài liệu đề cập đến cờ này hoặc sao chép và dán các bit cần thiết cho tài liệu. –

0

Bạn cũng sẽ có thể làm như sau:

$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request 

Với bất kỳ fetch yêu cầu tiếp theo bạn có thể bỏ qua một cách rõ ràng quy định cụ thể chế độ.

$stmt->setFetchAll(); //returns an array of objects 
8

này sẽ làm điều đó:

<?php 
$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $q->fetchAll(PDO::FETCH_OBJ); 
//$result contains an array of stdObjects 
?> 

Tuy nhiên thậm chí mát cách là để có được PDO để nhanh chóng lớp của riêng bạn và cư các thuộc tính cho bạn:

Ví dụ # 4 instantiating một lớp cho mỗi kết quả

Ví dụ sau minh họa các hành vi của chúng tôi về kiểu dáng PDO :: FETCH_CLASS tìm nạp.

<?php 
class fruit { 
    public $name; 
    public $colour; 
} 

$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

$result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit"); 
//$result contains an array of fruit objects 
?> 

Nguồn: http://www.php.net/manual/en/pdostatement.fetchall.php

Các vấn đề liên quan