2012-12-24 184 views
-2

我有一个烦人的问题,无论我告诉PDO返回一个数组或对象,它总是将它放入另一个数组中。即:PDO fetchAll返回数组中数组或数组中的对象

Array (
    [0] => stdClass Object ([name] => Test Topper [urlName] => test-topper) 
    [1] => stdClass Object ([name] => Test Topper [urlName] => test-topper) 
    [2] => stdClass Object ([name] => adfg dfg [urlName] => adfg-dfg) 
    [3] => stdClass Object ([name] => adfg dfg [urlName] => adfg-dfg) 
) 

如何停止这种行为,所以我结束了:

stdClass Object ([name] => Test Topper [urlName] => test-topper) 
[1] => stdClass Object ([name] => Test Topper [urlName] => test-topper) 
[2] => stdClass Object ([name] => adfg dfg [urlName] => adfg-dfg) 
[3] => stdClass Object ([name] => adfg dfg [urlName] => adfg-dfg) 

这样我就可以使用$data->name代替$data[0]->name访问属性?

这里是PHP负责获取数据:

public function fetchToppersAction($type, $orderBy, $limit) 
{ 
    $PDOParams = array() ; 
    $SQL = 'SELECT name, urlName FROM toppers_images, toppers 
      LEFT JOIN meta_descriptions AS md ON md.topperId = toppers.id 
      ' ; 
    if($type) 
    { 
     $SQL .= 'WHERE typeId = ?' ; 
     array_push($PDOParams, $type) ; 
    } 
    $SQL .= 'ORDER BY ? LIMIT ?' ; 
    array_push($PDOParams, $orderBy, $limit) ; 

    $r = $this->db->prepare($SQL) ; 
    $r->execute($PDOParams) ; 
    return $r->fetchAll(PDO::FETCH_OBJ) ; 
} 
+0

你叫'使用fetchall()'返回阵列(或物体)的阵列,因为它是期待返回多行。如果你知道你只有一行你想要返回,或者使用'fetch()'来代替(敏感选项),或者执行'current($ r-> fetchAll())'(有点傻,但它会起作用) – DaveRandom

+0

请审查你的问题。即使这已经被同行编辑了,它仍然不能理解你正在寻找什么,因为你给的例子**在PHP **中是不可能的。 – hakre

回答

1

这不可能这样..

你怎么能叫$data->name whgen您有多个名字吗?

而不是做这样的

/* 
    * $dataArray is the array which you are getting from $r->fetchAll(PDO::FETCH_OBJ); 
    * 
    */ 

    foreach($dataArray as $data){ 
    echo $data->name; 
    }