2013-08-15 5 views
1

Я знаю, что означает сериализация, но не совсем, как применить его. Когда вы сериализуете объект для базы данных. Не имеет значения язык, но здесь PHP.Почему вы сериализуете объект для базы данных?

<?php 
// $session_data contains a multi-dimensional array with session 
// information for the current user. We use serialize() to store 
// it in a database at the end of the request. 

$conn = odbc_connect("webdb", "php", "chicken"); 
$stmt = odbc_prepare($conn, 
     "UPDATE sessions SET data = ? WHERE id = ?"); 
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']); 
if (!odbc_execute($stmt, $sqldata)) { 
    $stmt = odbc_prepare($conn, 
    "INSERT INTO sessions (id, data) VALUES(?, ?)"); 
    if (!odbc_execute($stmt, $sqldata)) { 
     /* Something went wrong.. */ 
    } 
} 
?> 

Зачем мне это делать? Почему бы мне просто не использовать обычный запрос для обновления или вставки. Я читаю комментарии к коду, но я не понимаю.

EDIT: Какая информация находится в этой session_data, которую мне не нужно иметь в регулярном столбце?

ответ

1

Сериализация обычно используется для отправки объектов между приложениями (например, машинами, процессами) через поток данных, например - связь веб-службы по протоколу HTTP, сокетная связь и т. Д. В контексте сериализации баз данных необходим только тогда, когда объект , или некоторая его часть не может быть полностью сохранена в столбцах как значения ее свойств. Такой сценарий может возникнуть, если вы вынуждены хранить некоторые новые данные, но не можете обновлять существующую схему базы данных. Например, вы, возможно, используете некоторый столбец varchar для хранения некоторых данных в формате XML, например. Это, конечно, обескураживает, однако иногда, когда вы работаете с устаревшим кодом, другого пути нет.

+0

Какие объекты я бы послал, это не будет базу данных, которая должна быть сохранена? Или есть что-то еще сериализованное для базы данных, которую я бы послал? – johnny

+0

Я не уверен, о чем вы спрашиваете. Любой объект в вашем приложении может быть отправлен/сохранен. Это сильно зависит от контекста. Возможно, я мог бы быть более полезным, если бы вы задали более точный вопрос. – BartoszKP

0

базы данных (и другие внешние системы хранения/передачи) работают над блоками байтов. Таким образом, кому-то нужно преобразовать то, что у вас есть в памяти, в блок байтов, который также можно преобразовать обратно к тому, что вы изначально имели в памяти. Для некоторых вещей это тривиально, и система (PHP, db, ..) знает, как это сделать (например, строка). Но вы можете иметь действительно сложные вещи в памяти - например, словарь массивов. Кто-то должен сделать это в непрерывном восстанавливаемом блоке байтов (сериализовать), а также предоставить способ преобразования блока обратно в исходное в данных памяти (десериализация)