serializeでDBに保存したら復元できなくなったとき

PHPでよく配列やオブジェクトのデータをserializeしてDBに保存したりするのですけど、たまに復元しようとしてunserializeしても空っぽのときがあるんですよね。

ネットで調べてみたところ、base64を使うとよいとのこと。
そこで下記のようにしたら上手くいきました。

格納時

$serializedData = base64_encode(serialize($originalData));

 

取得時

$originalData = unserialize(base64_decode($serializedData ));

 

追記

どうもDBのカラムの型をBLOBにすれば、base64は使わなくても良いみたいですね。
本ケースは文字列型のカラムに突っ込むとき用ということで。
参考:http://php.net/manual/ja/function.serialize.php

 

追記2

大きなオブジェクトをそのまま突っ込むと容量をくいますので、gzcompressとgzuncompressを使うようにしました。
次のような感じです。DBに格納する場合、カラムの型はBLOB系です。

 

// 格納時
$serializedData = gzcompress(serialize($originalData), 9);

// 取得時
$originalData = unserialize(gzuncompress($serializedData));

コメント投稿は締め切りました。