Я пытаюсь хранить временные данные (например, продукты корзины, session_data) в БД. И я выбрал YAML для этого вместо функции serialize (). Поскольку данные YAML легко читаются человеческими и переносимыми между языками программирования.
У меня проблемы с YAML, если я храню свои временные данные в базе данных?
Лично я бы использовал сериализацию по двум причинам:
Что касается второго пункта. Serialize не просто преобразуется в строку, в которой он записывает тип, а PHP вызывает функции на объектах, поэтому вы можете выбрать, что сериализуете и что делать с данными, когда вы несериализуете его.
См. __sleep и __wake
Это может быть нелегко прочитать непосредственно из базы данных, но для написания сценария, который мог бы вытащить его, он не выполнил бы сериализацию и не выполнил бы print_r на данных, чтобы просмотреть, что хранится.
Лично я бы не использовал YAML. Он слишком зависит от формата (требуется новые строки, пробелы и т. Д.), И в PHP нет встроенного парсера. Вместо этого я бы использовал JSON для этого. Трудно обрабатывать изначально, и он достаточно читабель для человека (не так много, как YAML, но гораздо больше, чем сериализованный). Это лучшее из обоих миров.
Но, с учетом сказанного, вы действительно должны задать себе вопрос о том, почему вы хотите сохранить сериализованное представление сложной структуры данных в поле в БД … В большинстве случаев было бы лучше сохранить нормализованное представление данных (поэтому легко доступны для поиска и т. д.). «Неплохо» хранить сериализованные данные, но это может быть не оптимальным или правильным выбором в зависимости от того, что вы пытаетесь сделать. Как правило, это намного лучше, чем использование хранилища атрибутов Entity-Attribute-Value, но вам нужно действительно думать о том, что вы делаете, чтобы решить, правильно ли это.
Просто убедитесь, что вы избегаете всего потенциально опасного, т.е. пользовательского ввода, и вы в порядке.