我目前正在使用php来回应我的网页的json响应,并且在某些情况下遇到了麻烦。我无法弄清楚是什么导致了这一点。我使用的sql语句如下所示:
"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 :(得分:13)
是的,有。我认为可能发生的是你的一些行包含非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');
,虽然问题更深入,但您应该考虑正确转换所有字符以避免丢失字节。