пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Сериализация и десериализация

Сериализация - процесс перевода какой-либо структуры данных в последовательность битов. Это позволяет сохранить любую структуру данных в пригодном для дальнейшего использования (после десериализации) виде.
За эти два процесса в 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;

Должны вывестись данные указанные в начале.

 

 


22.06.2017; 17:37
хиты: 139
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь