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.. */
    }
}
?>

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

编辑: session_data 中有哪些我不需要在常规列中包含的信息?

4

2 回答 2

1

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

于 2013-08-15T20:28:53.873 回答
0

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

于 2013-08-15T20:45:00.433 回答