json_encode用Postgres数据库和php返回null

时间:2011-07-27 07:26:48

标签: php postgresql json

我指的是这个问题here on stackoverflow,我有同样的问题,除了我使用postgre数据库并且似乎无法使这个工作。

这是我的php函数,它正在查询数据库:

public function getCashData($id, $date)
{
    if ($this->openConnection()){
        $query = "SELECT * FROM cash_register (". $id .", '". $date ."');";

        $result = pg_query($query);
        if (!$result){
                return false;
        }

        return pg_fetch_all($result);
    }
}

我这样称呼这个函数:

$cashReport = getCashReport($id, $date);

$cashReport = array_map('utf8_encode' , $casaReport); //**note: please read below
echo json_encode($casaReport);

**当我只返回一行结果(而不是现在全部都是这样)时,这非常有效,但现在当我返回一个行数组时,这个array_map函数(我在上面提到的链接中找到)没有工作,因为它需要一个数组而不是一个数组数组。

你能帮助我解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

function encode_items(&$item, $key)
{
    $item = utf8_encode($item);
}

array_walk_recursive($cashReport, 'encode_items');

答案 1 :(得分:0)

也可以“告诉”postgre服务器发送utf-8编码的数据 见http://docs.php.net/pg_set_client_encoding

答案 2 :(得分:0)

我最终做到了这一点,因为我被迫“尽快”修复它:

$json = json_encode($cashReport);
$jsonEscapedNulls = str_replace('null', '""', $json);
echo $jsonEscapedNulls;

现在,我明白“修复”不是解决方案,但我在给定的时间段内没有其他选择:(。所以如果有人给出的答案不会作为解决方案,但作为一般解决方案,我会要感激不尽。在此之前,这将是必须的。