PHPでよく配列やオブジェクトのデータをserializeしてDBに保存したりするのですけど、たまに復元しようとしてunserializeしても空っぽのときがあるんですよね。
ネットで調べてみたところ、base64を使うとよいとのこと。
そこで下記のようにしたら上手くいきました。
格納時
[php]
$serializedData = base64_encode(serialize($originalData));
[/php]
取得時
[php]
$originalData = unserialize(base64_decode($serializedData ));
[/php]
追記
どうもDBのカラムの型をBLOBにすれば、base64は使わなくても良いみたいですね。
本ケースは文字列型のカラムに突っ込むとき用ということで。
参考:http://php.net/manual/ja/function.serialize.php
追記2
大きなオブジェクトをそのまま突っ込むと容量をくいますので、gzcompressとgzuncompressを使うようにしました。
次のような感じです。DBに格納する場合、カラムの型はBLOB系です。
[php]
// 格納時
$serializedData = gzcompress(serialize($originalData), 9);
// 取得時
$originalData = unserialize(gzuncompress($serializedData));
[/php]