Jnd的Zend_Db_Table_Rowset将int转换为字符串

时间:2011-11-09 11:49:32

标签: php ajax json zend-framework

在模型中:

public function getMeasurements($user_id) {
    $user_id = (int)$user_id;
    $row = $this->fetchRow('user_id = ' . $user_id);
    return $row->toArray();
}

回到控制器:

$array = $user->getMeasurements($user_id);
$this->_helper->json($array);

JSON回复:

{
   "user_id":"1",
   "height":"186.00",
   "waist":"81.00",
   "chest":"79.00",
   "hips":"81.00",
   "inseam":"85.00",
   "weight":"76.00"
}

我的问题是这些字段中的每一个都作为整数存储在数据库表中,但在JSON响应中作为字符串返回。怎么了?

到目前为止,

故障排除包括以下内容:

$this->_helper->json(array('integer'=>0, 'string'=>'0'));

这可以按预期工作。将行集转换为模型中的数组时是否丢失了类型?

1 个答案:

答案 0 :(得分:0)

这不是json的错误,也不是zf中的对话 它是mysqli(或另一个mysql扩展名)

查看示例:

    // sql
    CREATE TABLE `foo` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `type` enum('n','y') NOT NULL DEFAULT 'n',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 
<?
$c = new mysqli('localhost', 'azat', 'Z2UXWq2EyL7Or7m');
$c->select_db('test');
$info = $c->query('select * from foo');

var_dump($info->fetch_object());
    
    // output
    object(stdClass)#5 (2) {
      ["id"]=>                                                                                                                                                                                                                                            
      string(1) "2"                                                                                                                                                                                                                                       
      ["type"]=>                                                                                                                                                                                                                                          
      string(1) "y"                                                                                                                                                                                                                                       
    }