如何在序列化后从数据库中反序列化数据

时间:2011-12-21 09:43:57

标签: sql arrays session

try {
    if (isset($_SESSION['list']) > 0) {         
        $test = serialize($_SESSION["list"]);
        $sQuery = "INSERT INTO table (id, date) VALUES ('$test', NOW())";
        $oStmt = $db->prepare($sQuery); 
        $oStmt->execute();
    }
    else {
        echo 'No data';
    }
}

在我的数据库中,我看到了:

1   a:1:{i:1;s:1:"5";}  2011-12-21

$ _SESSION ['list']存储ID和QUANTITY。

数据a:1:{i:1; s:1:“5”;}如下:i = id,s = id:“quantity”,我把它读作id = 1和数量id = 1是5,我是对的吗?

现在我想选择数据并反序列化数组。

try {
    $sQuery = "SELECT * FROM table"; 
    $oStmt = $db->prepare($sQuery);
    $oStmt->execute();

    while($aRow = $oStmt->fetchALL(PDO::FETCH_ASSOC)) {
        $id = unserialize($aRow['id']);

        foreach($id as $id => $quantity) {  

            echo $id.', ';
        }
    }
}

catch(PDOException $e) { 
    $sMsg = '<p> 
    Regelnummer: '.$e->getLine().'<br /> 
    Bestand: '.$e->getFile().'<br /> 
    Foutmelding: '.$e->getMessage().' 
    </p>'; 
    trigger_error($sMsg); 
}

我做错了什么或我该怎么做才能从数据库中选择ID和QUANTITY?

1 个答案:

答案 0 :(得分:0)

序列化/反序列化部分对我来说很合适,但我认为$oStmt->fetchALL(应该是$oStmt->fetch(,并且foreach($id as $id => $quantity) {使用另一个变量来保存密钥而不是id,例如{ {1}}。

此外,您不会在任何地方回显数量。将foreach($id as $key => $quantity) {更改为echo $id.', ';或其他内容并告诉我们输出结果是什么,以便我们进一步提供帮助。