Примечание: unserialize(): ошибка со смещением 473 из 578 байтов при выполнении запроса доктрины
Мы пытаемся выполнить приведенный ниже запрос доктрины и выдать его unserialize(): ошибка со смещением 473 из 578 байт.
Запрос доктрины:
SELECT p FROM MyCompanyBundle:Person p
WHERE p.dateOfExit IS NULL
AND (p.passportCountry IS NULL OR p.passportCountry <> :india OR
p.invitationId IS NOT NULL)
AND (p.category <> :category_cl AND
p.category <> :category_staff AND p.category <> :category_sev AND
p.category <> :category_visitor)
Как часть вышеприведенного запроса, он пытается получить данные ниже и выдает ошибку. Но то же самое работает как запрос mysql.
Mysql Таблица вывода
a:3:{s:19:"волонтерство-локальное0";a:3:{s:8:"активность";s:23:"Мистический глаз кальката 2017";s:11:"описание";s:239:"Я был в команде поддержки, а также в летном отряде, состоящем только из 5 странных людей, включая меня. Нам сказали летать вокруг и протягивать руку всем, кто в ней нуждается, и в основном мы выполняли черную работу.. рука ";s:8:" расположение ";s:7:" Калькутта ";}s:19:" добровольчество-LOCAL1 "; а: 3: {s: 8:" активность ";s:17:" Внутренний Инжиниринг "; с: 11:" описание "; с:104:" Я вызвался добровольцем в день посвящения. У меня была возможность участвовать в кухонных работах тоже
Подробное описание ошибки:
Symfony \ Component \ Debug \ Exception \ ContextErrorException в вендоре /doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php (строка 58) ArrayType->convertToPHPValue('a:3:{s:19:"добровольческий-локальный0 "; a: 3: {s: 8:" активность ";s:23:"Mystic eye kolkata 2017";s:11:"description";s:239:" Я был в команде организаторов, а также в летном отряде состоящий только из 5 странных людей, включая меня. Нам сказали летать вокруг и протягивать руку всем, кому это нужно на месте. И в основном, мы выполняли черную работу в первую очередь.";s:8:"location";s:7:"Калькутта";} с: 19: "волонтерство-местный1"; а: 3: {с: 8: "деятельность"; с: 17: "Внутренняя инженерия"; с: 11: "описание"; с: 104: "Я вызвался добровольцем в день посвящения. У меня была возможность участвовать и в кухонных работах", объект (MySQL57Platform)) в vendor/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php (строка 316)
пожалуйста, предложите мне любые идеи, чтобы решить эту проблему доктрины.
1 ответ
Прежде чем винить Doctrine ORM в вашей ошибке, давайте сначала рассмотрим ваш сериализованный массив.
Сериализованный массив (на основе выходных данных вашей таблицы MySQL):
a:3:{s:19:"volunteering-local0";a:3:{s:8:"activity";s:23:"Mystic eye kolkata 2017";s:11:"description";s:239:"I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.";s:8:"location";s:7:"Kolkata";}s:19:"volunteering-local1";a:3:{s:8:"activity";s:17:"Inner Engineering";s:11:"description";s:104:"I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too
Подождите, это немного грязно, чтобы изучить сериализованный массив. Давайте сделаем это "читабельным":
a:3:{
s:19:"volunteering-local0";
a:3:{
s:8:"activity";
s:23:"Mystic eye kolkata 2017";
s:11:"description";
s:239:"I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.";
s:8:"location";
s:7:"Kolkata";
}
s:19:"volunteering-local1";
a:3:{
s:8:"activity";
s:17:"Inner Engineering";
s:11:"description";
s:104:"I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too
Сделав сериализованный массив "читабельным", вы можете увидеть там недопустимую сериализованную структуру объекта.
a:3:{
s:19:"volunteering-local0";
a:3:{
s:8:"activity";
s:23:"Mystic eye kolkata 2017";
s:11:"description";
s:239:"I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.";
s:8:"location";
s:7:"Kolkata";
}
s:19:"volunteering-local1";
a:3:{
s:8:"activity";
s:17:"Inner Engineering";
s:11:"description";
s:104:"I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too"; // you miss the closing double quote and semicolon
} // you miss the closing curly bracket
} // you miss the closing curly bracket
После исправления структуры теперь у вас возникли проблемы с ошибками смещения.
В строке 1 написано "a:3: значение". Это означает, что у вас есть массив, содержащий ровно 3 элемента внутри. Но значение говорит, что у вас есть только 2 элемента (с ключами "добровольцы-местные0" и "добровольцы-местные1"). Таким образом, строка 1 должна быть "a:2:value".
В строке 16 написано "s:104: значение". Это означает, что у вас есть строка, содержащая ровно 104 символа. Но значение говорит, что у вас есть только 100 символов строки.
Есть еще некоторые недействительные структуры, если вы исследуете это глубже.
Сериализованный массив поврежден или, скажем, "недействителен". Вот почему Doctrine генерирует исключение, когда пытается десериализовать данный сериализованный массив в массив PHP, вызывая "Doctrine\DBAL\Types\ArrayType::convertToPHPValue($serializedValue)". Даже если вы попытаетесь десериализовать его с помощью внутренней функции PHP "unserialize($serializedValue)", вы также попадете в ошибку. Будет сказано "unserialize(): ошибка по смещению 5 из 771 байта".
Если мне придется исправить это, то, что я представляю себе исходный массив PHP на основе вашего сериализованного массива, будет:
array(
array(
'volunteering-local0' => array(
'activity' => 'Mystic eye kolkata 2017',
'description' => 'I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.',
'location' => 'Kolkata',
),
),
array(
'volunteering-local1' => [
'activity' => 'Inner Engineering',
'description' => 'I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too',
],
],
]
И если я хочу сериализованный массив этого массива PHP, это будет:
a:2:{
i:0;
a:1:{
s:19:"volunteering-local0";
a:3:{
s:8:"activity";
s:23:"Mystic eye kolkata 2017";
s:11:"description";
s:239:"I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.";
s:8:"location";
s:7:"Kolkata";
}
}
i:1;
a:1:{
s:19:"volunteering-local1";
a:2:{
s:8:"activity";s:17:"Inner Engineering";
s:11:"description";
s:100:"I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too";
}
}
}
И если я хочу одну строку этого сериализованного массива, это будет:
a:2:{i:0;a:1:{s:19:"volunteering-local0";a:3:{s:8:"activity";s:23:"Mystic eye kolkata 2017";s:11:"description";s:239:"I was in ushering team and also in the flying squad consisting of only 5 odd people including me. We were told to fly around and lend our hand to anyone who needs it in the spot. And mostly the menial jobs were our responsibility 1st hand.";s:8:"location";s:7:"Kolkata";}}i:1;a:1:{s:19:"volunteering-local1";a:2:{s:8:"activity";s:17:"Inner Engineering";s:11:"description";s:100:"I have volunteered in the initiation day . I had the oppurtunity to be part of the kitchen works too";}}}