json_encode在我的php中毫无用处

json_encode在我的php中毫无用处,php,json,Php,Json,我有一个小代码,我知道我从数据库收到了很好的结果,因为我做了一些打印,工作很好: //build query SQL $query = $this ->select() ->where('numBedrooms=?',$numBedrooms) ->where('type=?',$type) ->where('state=?',$state) ->limit(8);//8 rows, with an offset

我有一个小代码,我知道我从数据库收到了很好的结果,因为我做了一些打印,工作很好:

//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!!

如果fetchAll()返回的是您所说的对象,那么最好先将其转换为数组,然后将其传递给json_encode。我不相信json_编码与对象一起工作。

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

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


请参见

上的以数组形式检索行集,以添加对此的不同答案

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的对象。不同之处在于,您要求对象获取所有($query),而我使用的是select to query()->fetchAll()。我相信select对象需要来自$this->select(),这样才能工作。

什么是
fetchAll()
返回的?一个对象,里面有数组和更多的objectsprint\r给我这个结果:
json\u encode()
将只对对象中的公共属性进行编码。@Radiu:这并不意味着它将返回您可能期望的结果。@Hamish,只要您希望看到公共属性,它就会返回。这是正确的解决方案。只是澄清一下:
json\u encode
可以序列化任何PHP类型(不包括资源)。OP的问题:
Zend\u Db\u Table\u行集::\u data
受保护,无法通过
json\u encode
或其他函数直接访问。因此需要调用
toArray()
来获取受保护的数据。@powers1确实如此。感谢您提供更多详细信息