2011-07-27 37 views
1

我指的是这个问题here on stackoverflow,我有同样的问题,除了我使用Postgre数据库,似乎无法得到这个工作。json_encode返回null与Postgres数据库和PHP

这是被查询的数据库我的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函数(我在上面提到的链接中找到)不起作用,因为它需要一个数组而不是一个数组数组。

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

+0

为什么你必须运行你的数组通过'utf8_encode'?我认为'json_encode'将会处理它。 – Shef

+0

@Shef:实际上,它不会因为链接中解释的原因我在这个问题上给了。只是给你一个例子,我会得到输出:“colin”:null,“colout”:“1500”。你看到这个null?那么,这会在脚本的后面给我带来问题。我需要这个“colin”:“”,“colout”:“1500”。所以“”而不是空。 – Nikola

+0

你不会解决更多问题的问题,而是首先解决造成问题的原因。如果你知道你会得到'utf8'字符,那么将你的数据库排序改为'UTF8'。这将从根本上解决所有问题。 – Shef

回答

0

我这样做到底,因为我不得不尽快“修理”它:

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

现在,我明白了“修复”不是解决方案,但我没有别的选择在给定的时间段内:(所以如果有人给出的答案不会作为一种解决办法,但作为一个通用的解决方案,我将不胜感激。在此之前,这将不得不做。

1

试试这个:

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

array_walk_recursive($cashReport, 'encode_items');