4

我有这个小代码,我知道我从数据库中收到了很好的信息,因为我做了一些 print_r 并且工作正常:

//build query SQL         
$query = $this ->select() 
    ->where('numBedrooms=?',$numBedrooms) 
    ->where('type=?',$type)
    ->where('state=?',$state)
    ->limit(8);//8 rows, with an offset of $recent_page*8-8
//execute query SQL
$rows=$this->fetchAll($query);
//encode json
$var= json_encode($rows);//-------->var is empty always!!
4

3 回答 3

4

您需要将行集转换为数组:

$var= json_encode($rows->toArray());

请参阅http://framework.zend.com/manual/en/zend.db.table.rowset.html上的将行集作为数组检索

于 2012-07-26T00:43:57.490 回答
3

要为此添加不同的答案...

Zend 提供了不同的数据访问方式。我发现在 Zend 中始终使用数组更容易,因为它使您的代码更具可移植性。

使用 Zend_Db_Table_Abstract:

class Model_MyStuff extends Zend_Db_Table_Absract
{
    protected $_name = 'Stuff';
    protected $_primary = 'StuffID';

    function getStuff()
    {
        $select = $this->select();

        $select->where('Active = 1');

        $results = $select->query()->fetchAll();
        if (count($results) > 0) return $results;
        return null;
    }
}

此代码将返回一个数组而不是可以立即传递给 json_encode 的对象。不同之处在于您要求对象 fetchAll($query),而我将选择作为 query()->fetchAll()。我相信选择对象需要来自 $this->select() 才能正常工作。

于 2012-09-29T18:08:45.970 回答
0

如果 fetchAll() 像您说的那样返回一个对象,那么明智的做法是首先将其转换为数组,然后将其传递给 json_encode。我不相信 json_encode 与对象一起工作。

于 2012-07-26T00:38:37.327 回答