2015-10-14 110 views
2

我目前使用php迴應json響應到我的網頁,並且在某些情況下遇到問題。我無法弄清楚這是什麼原因造成的。我使用的是SQL語句,看起來像這樣:回聲json_encode在某些情況下不起作用

"SELECT * 
     FROM table 
     WHERE id = $id 
     LIMIT 20 OFFSET $offset" 

唯一的變化就是在$offset當用戶切換頁面。我有8頁數據的數據,第7頁和第8頁都沒有返回數據,而其他所有數據都是這樣。當我將這個sql語句複製到我的數據庫進行測試時,它會正確地檢索數據。

在這裏,我怎麼想呼應的JSON:

while ($row = mysqli_fetch_array($fetch, MYSQLI_ASSOC)) { 
    $row_array['id'] = $row['id']; 
    $row_array['title'] = $row['title']; 
    $row_array['description'] = $row['description']; 
    array_push($return_arr,$row_array); 
    //echo json_encode($return_arr); <-- this returns JSON 
} 

echo json_encode($return_arr); 

在除第7頁和第8返回正確的JSON,但是,這兩個網頁出於某種原因回聲什麼都不做的所有網頁。如果我將json放入循環中,我將它評論出來,它會返回奇怪的第7頁和第8頁的正確json。我在驗證器中檢查該json,並且它是有效的json。任何方式來檢查錯誤或調試?

+0

如果我添加行後,它不打印任何東西。如果我把它放在裏面 - 與回聲相同 - 那裏有什麼想法? – user081608

回答

11

是的,有。我認爲可能發生的情況是您的某些行包含非utf8編碼字符。 json_encode如果發生這種情況將失敗,只返回false。您可以使用is_bool進行檢查。

http://php.net/manual/en/function.json-encode.php

value 
The value being encoded. Can be any type except a resource. 

All string data must be UTF-8 encoded. 

一個天真的解決方案來解決這個問題是做mysqli_set_charset($dbc, 'utf8');,但問題的關鍵在於更深,你應該看看正確的轉換所有的字符以避免丟失字節。

+0

你建議的路線是相對於我的PHP代碼?在頂部? – user081608

+0

對於'mysqli_set_charset',你可以在查詢運行之前將它放好,所以在你的mysqli聲明後立即打敗 –

+0

這樣就可以工作了。很好的解釋! – user081608

相關問題