为什么要为数据库序列化对象?

时间:2013-08-15 20:24:14

标签: serialization

我知道序列化的意思,但不知道如何应用它。何时序列化数据库的对象。这与语言无关,但这里是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.. */
    }
}
?>

我为什么要这样做?为什么我不会只使用常规查询执行更新或插入。我阅读了代码注释,但我没有理解它。

编辑:在session_data中我需要在常规列中没有哪些信息?

2 个答案:

答案 0 :(得分:1)

序列化通常用于通过数据流在应用程序(机器,进程)之间发送对象,例如 - 通过HTTP协议的Web服务通信,套接字通信等。在数据库的上下文中,只有在对象时才需要序列化,或者它的某些部分不能完全存储在列中作为其属性的值。如果您被迫存储一些新数据,但无法更新数据库的现有架构,则会出现这种情况。然后,您可能使用一些varchar列以XML格式存储更多数据,例如。当然不鼓励这样做,但有时当您使用遗留代码时,没有别的办法。

答案 1 :(得分:0)

数据库(和其他外部存储/传输系统)处理字节块。因此,有人需要将内存中的内容转换为字节块,这些字节块也可以转换回原来在内存中的内容。对于某些事情,这是微不足道的,系统(PHP,db,..)知道如何做(例如字符串)。但是你可以在内存中有一个非常复杂的东西 - 例如一个数组字典。有人必须将其转换为连续的可恢复字节块(序列化),并提供一种将块转换回内存数据中原始数据的方法(反序列化)