Серіалізовані дані у таблицях бази даних WordPress
Привіт:) У цьому матеріалі розгляну що таке серіалізація даних та для чого використовується у базі даних WordPress.
Що таке серіалізація та для чого потрібна
Серіалізовані дані — це спосіб зберігання складних структур даних, таких як масив або об’єкт, в одному полі чи стовпці бази даних.
Серіалізовані дані представлені у вигляді рядка, і вони використовуються WordPress та багатьма іншими програмами для зберігання налаштувань, параметрів та інших даних. Однак, оскільки серіалізовані дані зберігаються у вигляді рядка, їх неможливо легко знайти або замінити за допомогою запитів SQL або регулярних виразів.
Якщо ви спробуєте знайти та замінити серіалізовані дані без урахування їх структури, ви можете пошкодити дані, зробивши їх непридатними для використання. Наприклад, якщо ви шукаєте та замінюєте серіалізований масив, не оновлюючи довжину рядка, який представляє масив, то можете отримати рядок, який буде довшим або коротшим, ніж повинен. Це може призвести до пошкодження даних і зробити неможливим повернення їх у вихідний формат.
Тому, маючи справу із серіалізованими даними, важливо використовувати спеціалізовані інструменти та методи, які враховують структуру даних.
Серіалізація у середовищі WordPress
У середовищі WordPress серіалізація використовується такими функціями, як update_option()
або update_site_meta()
для того, щоб можна було зберігати структурні дані налаштувань сайту в базу даних, де все зберігається в скалярних значеннях.
Для серіалізації даних та зворотного процесу WordPress у своєму арсеналі має вбудовані функції maybe_serialize()
і maybe_unserialize()
.
Приклади серіалізації у середовищі WordPress
Приклад. Нехай маємо масив:
array(
'text' => 'Hello, world!',
'image' => 'flowers.jpg'
)
Застосуємо до нього функцію maybe_serialize()
:
print_r(
maybe_serialize(
array(
'text' => 'Hello, world!',
'image' => 'flowers.jpg'
)
)
);
Результат буде наступним:
a:2:{s:4:"text";s:13:"Hello, world!";s:5:"image";s:11:"flowers.jpg";}
Тепер якщо для отриманого рядка використати функцію maybe_unserialize()
(десеріалізація):
print_r(
maybe_unserialize(
'a:2:{s:4:"text";s:13:"Hello, world!";s:5:"image";s:11:"flowers.jpg";}'
)
);
В результаті отримаємо наш початковий масив:
Array ( [text] => Hello, world! [image] => flowers.jpg )
Серіалізовані дані у таблицях бази даних WordPress
Для прикладу візьмемо значення опції some_plugin_settings
в таблиці wp_options
, яке міститься у вигляді серіалізованих даних:
a:2:{s:10:"setting_one";s:5:"value1";s:10:"setting_two";s:5:"value2";}
Розглянемо детальніше цю структуру.
a:2:
— це означає, що дані є асоціативним масивом з двома елементами.{s:10:"setting_one";s:5:"value1";s:10:"setting_two";s:5:"value2";}
— тіло масиву, де:
s:10:"setting_one";
— ключ є рядком (string) довжиною 10 символів, і його значенням є рядок "setting_one
";s:5:"value1";
— ключ є рядком довжиною 5 символів, і його значенням є "value1
";- аналогічно для другого елемента масиву.