我有这个小代码,我知道我从数据库收到的很好,因为我做了一些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!!
答案 0 :(得分:4)
您需要将行集转换为数组:
$var= json_encode($rows->toArray());
请参阅http://framework.zend.com/manual/en/zend.db.table.rowset.html
上的将行检索为数组答案 1 :(得分: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),而我正在选择查询() - > fetchAll()。我认为选择对象需要来自$ this-> select()才能使其工作。
答案 2 :(得分:0)
如果fetchAll()返回一个像你说的那样的对象,那么首先将它转换为数组然后将其传递给json_encode是明智的。我不相信json_encode与对象一起工作。