Потому что вы одну строку получаете, энкодите и возвращаете. Вам нужно через while сохранить все строки в массив, заэнкодить этот весь массив и вернуть его. Что-то типа:
JSON_UNESCAPED_UNICODE для функции json_encode, При декоде вы в любом случае должны получить обычный текст независимо от того кодировали его с JSON_UNESCAPED_UNICODE или нет.