Десериализация сериализованных данных PHP в T -SQL

Я пытаюсь извлечь код подарочной карты из заказа Magento. Некоторый другой код использует API Magento для извлечения информации о заказе в виде XML из Magento и вставки XML в запись MS SQL Server. Используя T -SQL, я могу использовать функции XML для анализа XML, который был получен из Magento API, и получить почти все, что мне нужно, но единственное место, где хранится фактический код подарочной карты, — это поле подарочных карт _, которое оказывается сериализованной строкой php.

Примеры:

a:1:{i:0;a:5:{s:1:"i";s:1:"1";s:1:"c";s:12:"00XCY8S3ZXCU";s:1:"a";d:119;s:2:"ba";d:119;s:10:"authorized";d:119;}}
a:3:{i:0;a:5:{s:1:"i";s:2:"10";s:1:"c";s:12:"045EMJJWRCF1";s:1:"a";d:100;s:2:"ba";d:100;s:10:"authorized";d:100;}i:1;a:5:{s:1:"i";s:2:"11";s:1:"c";s:12:"06DUQ7Z5GVT7";s:1:"a";d:101;s:2:"ba";d:101;s:10:"authorized";d:101;}i:2;a:5:{s:1:"i";s:2:"12";s:1:"c";s:12:"07A6MRYW511J";s:1:"a";d:102;s:2:"ba";d:102;s:10:"authorized";d:102;}}

Код подарочной карты — это значение в массиве с ключом «c», например: 00XCY8S3ZXCU045EMJJWRCF106DUQ7Z5GVT707A6MRYW511J

В настоящее время я пытаюсь решить эту проблему, анализируя значение с помощью функции T -SQL, что похоже на попытку забить гвоздь отверткой. Очевидно, об этом уже спрашивали здесь , и единственным предложением было создать синтаксический анализатор с нуля на T -SQL, но использование PHP для его десериализации было лучшим вариантом.

Было бы неплохо, если бы Magento не хранила сериализованные данные PHP в своей базе данных, а затем обслуживала их, все еще сериализованными, в своих веб-сервисах, но это то, с чем мне приходится работать. Я бы рассмотрел возможность использования C #для его преобразования и сохранения в виде отдельного поля в базе данных, но было бы намного удобнее анализировать данные в T -SQL. Если бы я использовал C #для анализа и десериализации объекта PHP, я бы, вероятно, сохранил его как XML обратно в базу данных, потому что это гораздо лучший формат для обмена данными.

5
задан Community 23 May 2017 в 11:50
поделиться