Для ответа на этот вопрос нужна всего лишь капелька здравого смысла.
Ну и адекватное восприятие реальности, с чем у большинства населения, увы, как раз большие проблемы.
Человек с адекватным восприятием реальности сделает очень простое умозаключение: если в ответе появляются посторонние символы, то это значит, что они присутствуют в скрипте. После этого найдет эти символы и удалит. Тупо проверив все файлы, которые участвуют в обработке запроса.
А для неразрешимой проблемы "почему на локалке посторонних символов нету" найдет простое рациональное объяснение: файлы "на локалке" и "не на локалке" отличаются.
Человек же, у которого вместо реальной картины мира в голове неясные фантазии, начнет воображать какие-то неведомые козни, и ничего не предприняв, пойдет искать помощи у посторонних людей.
Ну и поскольку у меня глаза не могут смотреть на эти хаотичные телодвижения, то вот как этот код может выглядеть на самом деле
файл init.php
<?php
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASSWORD);
$conn -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
set_exception_handler(function ($e)
{
http_response_code(500);
error_log($e);
echo json_encode([
'code' => 'error',
'message' => 'Internal server error'
]);
});
файл с кодом
<?php
// Подключаемся к базе данных
require 'init.php';
// Получаем данные
$list = get_list($conn);
echo json_encode([
'code' => 'success',
'data' => $list
]);
Без всей этой кропотливой возни и самоповторов.
Отсутствие данных ошибкой не является. В JS можно проверить массив data и вывести сообщение, что он пустой. Никакой специальный код для этого передавать не нужно.
А настоящие ошибки надо обрабатывать единообразно, в одном месте. А не писать обработку после каждой строчки, причем каждый раз по-разному.