2015-10-14 111 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

相关问题