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