Я недавно перенес приложение из MySQL в сервис Amazon Aurora MySQL. Мое приложение извлекает данные из этой базы данных и использует их для поиска в одном из индексов Elasticsearch.
Базовый HTTP-клиент библиотеки PHP Elasticsearch кодирует данные запроса в JSON перед отправкой на сервер Elasticsearch. Я обнаружил, что иногда json_encode
вызов завершается неудачно и возвращает false при передаче данных, извлеченных из базы данных. Это происходит через случайные интервалы, поэтому я не мог найти точную причину.
Мои выводы приведены ниже:
json_encode
не удается, когда эти данные передаются ему.Снимок экрана ответа базы данных
Кто-нибудь здесь сталкивался с подобной проблемой с базой данных Aurora или MySQL, или это просто проблема самого PHP?
Никогда не предполагайте, что когда-либо использовать php и mysql … 8/10 то, что вы думаете, не проблема … это проблема …
Итак, попробуйте это:
function array_utf8_encode($dat){
if (is_string($dat))
return utf8_encode($dat);
if (!is_array($dat))
return $dat;
$ret = array();
foreach ($dat as $i => $d)
$ret[$i] = self::array_utf8_encode($d);
return $ret;
}
$my_db_arr = array_utf8_encode($my_db_arr);
// Now let's encode
$json = json_encode($my_db_arr);
НОТА функция array_utf8_encode не моя … но я, честно говоря, не помню, где я нашел ее здесь на stackOverflow … в противном случае я бы поставил ссылку и относительные кредиты …
var_dump(json_last_error_msg());
Хорошего дня,
Антонио
Других решений пока нет …