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

投稿者: | 2016年11月2日

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]