Wkrocz w ciemność:niektóre wiersze bazy danych zawierają znaki spoza zestawu ASCII (np. ü, é itp.). Twoje połączenie z bazą danych jest ustawione na latin1
, więc dane nie są zakodowane w UTF-8. json_encode
wymaga danych zakodowanych w UTF-8. Jeśli pobierzesz wystarczającą liczbę wierszy, będą tam wiersze z takimi danymi innymi niż UTF-8, a json_encode
zawodzi. Przy niewielkiej liczbie rzędów zdarza się, że nie trafisz w te problematyczne.
Przetestuj to, wypisując echo json_last_error_msg();
po json_encode
.
Ustaw połączenie z bazą danych na UTF-8. Zobacz, jak to zrobić:UTF-8 przez cały czas
Powód, dla którego Twoja przeglądarka skarży się na nieprawidłowy JSON, gdy dołączasz print_r
jest proste:ponieważ wtedy PHP generuje dużo śmieci, które nie są w formacie JSON, których przeglądarka nie może zdekodować jako JSON.