Сериализация - процесс перевода какой-либо структуры данных в последовательность битов. Это позволяет сохранить любую структуру данных в пригодном для дальнейшего использования (после десериализации) виде.
За эти два процесса в php отвечают 2 функции - serialize и unserialize.
Попробуем сериализовать простенький объект, сохранить его в базе данных mysql, а затем десериализовать его и вывести на экран.
Прежде всего опишем класс. Можете по колдовать и создать свой, это роли не играет:
1 2 3 4 |
class A { public $a; public $b; } |
Теперь создадим экземпляр класса - объект. И заполним его информацией:
1 2 3 |
$a = new A(); $a->a = "blablacode.ru"; $a->b = "howto"; |
Сериализуем объект:
1 |
$b = serialize($a); |
Обратите внимание что в таком случае в переменную $b попадёт такая строка: O:1:"A":2:{s:1:"a";s:11:"blablacode.ru";s:1:"b";s:5:"howto";}
Что может затруднить её добавление в базу или последующую передачу в качестве параметра GET. Поэтому пропустим эту строку через функцию addslashes. Она экранирует нежелательные символы:
1 |
$obj = addslashes($b); |
Теперь всё готово для добавления в базу данных:
1 2 3 4 |
mysql_connect("localhost","root","pass"); mysql_select_db("test"); mysql_query("SET NAMES 'utf8'"); mysql_query("INSERT INTO `obj`(`obj`) VALUES ('$obj')") or die("Error"); |
Подробнее о подключении и добавлении данных в базу можете почитать тут.
Таким образом мы добавили объект в базу данных "test" в таблицу "obj".
Теперь попробуем выбрать из неё эту запись и "вернуть" данные.
Прежде всего выведем уведомление о том, что все данные сериализованы и скрипт приступил к десериализации.
1 |
echo "serialized:"; |
Выберем строку из базы данных:
1 2 |
$d = mysql_query("SELECT * FROM obj ORDER BY id DESC") or die("get error"); $res = mysql_fetch_array($d); |
Десериализуем её:
1 |
$c = unserialize($res['obj']); |
Выведем данные на экран:
1 2 3 |
echo $c->a; echo "<br>"; echo $c->b; |
Должны вывестись данные указанные в начале.