【问题标题】:How can I unserialize data from database after it was serialized序列化后如何从数据库中反序列化数据
【发布时间】:2011-12-21 09:43:56
【问题描述】:
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?

【问题讨论】:

    标签: sql arrays session


    【解决方案1】:

    序列化/反序列化部分对我来说看起来不错,但我认为$oStmt-&gt;fetchALL( 应该是$oStmt-&gt;fetch(,并且在foreach($id as $id =&gt; $quantity) { 中使用另一个变量来保存密钥而不是id,例如foreach($id as $key =&gt; $quantity) {

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

    【讨论】:

    • 谢谢,非常有帮助。我将 $oStmt->fetchAll( 更改为 $oStmt->fetch( 并将 foreach($id as $id => $quantity) { 更改为 foreach($id as $key=> $quantity) { 结果正是我需要。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2011-03-17
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多