Как я могу десериализовать данные из базы данных после их сериализации - PullRequest
1 голос
/ 21 декабря 2011
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 и КОЛИЧЕСТВО.

Данные a: 1: {i: 1; s: 1: "5";} выглядят следующим образом: i = id, s = id: "amount", я читаю это как 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); 
}

Что я делаю не так или что я могу сделать, чтобы я мог выбрать ИД и КОЛИЧЕСТВО из базы данных?

1 Ответ

0 голосов
/ 21 декабря 2011

Часть сериализации / десериализации выглядит хорошо для меня, но $oStmt->fetchALL(, я думаю, должен быть $oStmt->fetch(, а в foreach($id as $id => $quantity) { используйте другую переменную для хранения ключа вместо идентификатора, например foreach($id as $key => $quantity) {.

Кроме того, вы нигде не отражаете количество. Измените echo $id.', '; на echo $key.' '.$quantity; или что-то в этом роде и сообщите нам, каковы результаты, чтобы мы могли помочь в дальнейшем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...