Я использую MySQL GROUP_CONCAT()
для генерации строки JSON. Затем я расшифровываю его на PHP с помощью json_decode()
.JSON Безопасные значения от MySQL
Я уже спасаясь двойные кавычки в значениях, как это:
REPLACE(COALESCE(`column_name`, ''), '"', '\\\\"')
Моя проблема заключается в том, что есть какой-то другой символ в записи, что недействительным и вызывая JSON_ERROR_SYNTAX
(4) при попытке декодирования. Вместо того, чтобы отслеживать специфический характер, который вызывает эту проблему, я хотел бы применить более общее решение, которое делает ценности «безопасными».
This blog решает эту проблему с помощью HEX()
функции MySQL, чтобы закодировать значение, а затем это PHP функция на декодировании конца для каждого значения:
function hexToStr($hex)
{
$string = '';
for ($charIter = 0; $charIter < strlen($hex) - 1; $charIter += 2)
{
$string .= chr(hexdec($hex[$charIter] . $hex[$charIter + 1]));
}
return $string;
}
Я ищу решение, которое требует меньше работы по конец декодирования. Идеально выполняет всю работу в MySQL.
После трех downvotes и закрытого голосования я не уверен, как лучше структурировать свой вопрос. Я просто хочу избежать значений в MySQL, чтобы они были «безопасными JSON».
Почему вы хотите сгенерировать строку json с помощью GROUP_CONCAT()? GROUP_CONCAT() сделает запрос медленным. почему бы не выполнить простой запрос? – vasilenicusor
Вам никогда не приходило в голову, что то, что вы делаете, в основном глупо? Вы создаете строку JSON в MySQL, а затем расшифровываете ее на PHP - что не так с тем, чтобы вытащить материал из MySQL, а затем делать что-то с ним на PHP - преобразовывая его и кодируя/расшифровывая его? Базы данных не являются языками программирования, которые преобразуют данные в различные форматы, у них простая работа, и они делают это хорошо. Вы хотите использовать молот, чтобы съесть с ним суп. Хотя выполнимо, имеет ли смысл делать это? В качестве альтернативы вы всегда можете использовать JSON UDF и уйти от проблемы, но глупая часть все равно останется. –