2011-07-27 40 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');