YAML или serialize () для хранения данных в MySQL

Я пытаюсь хранить временные данные (например, продукты корзины, session_data) в БД. И я выбрал YAML для этого вместо функции serialize (). Поскольку данные YAML легко читаются человеческими и переносимыми между языками программирования.

У меня проблемы с YAML, если я храню свои временные данные в базе данных?

Лично я бы использовал сериализацию по двум причинам:

  1. Он включен в PHP по умолчанию.
  2. То, что вы вкладываете, – это то, что вы выходите.

Что касается второго пункта. Serialize не просто преобразуется в строку, в которой он записывает тип, а PHP вызывает функции на объектах, поэтому вы можете выбрать, что сериализуете и что делать с данными, когда вы несериализуете его.

См. __sleep и __wake

Это может быть нелегко прочитать непосредственно из базы данных, но для написания сценария, который мог бы вытащить его, он не выполнил бы сериализацию и не выполнил бы print_r на данных, чтобы просмотреть, что хранится.

Лично я бы не использовал YAML. Он слишком зависит от формата (требуется новые строки, пробелы и т. Д.), И в PHP нет встроенного парсера. Вместо этого я бы использовал JSON для этого. Трудно обрабатывать изначально, и он достаточно читабель для человека (не так много, как YAML, но гораздо больше, чем сериализованный). Это лучшее из обоих миров.

Но, с учетом сказанного, вы действительно должны задать себе вопрос о том, почему вы хотите сохранить сериализованное представление сложной структуры данных в поле в БД … В большинстве случаев было бы лучше сохранить нормализованное представление данных (поэтому легко доступны для поиска и т. д.). «Неплохо» хранить сериализованные данные, но это может быть не оптимальным или правильным выбором в зависимости от того, что вы пытаетесь сделать. Как правило, это намного лучше, чем использование хранилища атрибутов Entity-Attribute-Value, но вам нужно действительно думать о том, что вы делаете, чтобы решить, правильно ли это.

Просто убедитесь, что вы избегаете всего потенциально опасного, т.е. пользовательского ввода, и вы в порядке.