4,944 views
この記事は最終更新から 2651日 が経過しています。
(1) やりたいこと
PHPプログラム上の複雑なデータ構造を、DBに保存したい。
でも…
個々のメンバ変数について、個々にカラムを作るのは面倒だ。
複雑なデータを、1個のカラムにまとめて保存したい。
↓
シリアライズして保存すればよい!
(2) やってみる
1. まずはシリアライズしてみる。
クラスのインスタンスに対して serialize() でシリアライズし、unserialize() で戻す。
class CAaa {
private $m_text;
private $m_int;
private $m_array;
function __construct( $text, $int, $array ){
$this->m_text = $text;
$this->m_int = $int;
$this->m_array = $array;
}
}
$caaa = new CAaa("hello", 1234, array(1,2,3,4,5));
var_dump($caaa);
echo "<hr>";
$bin_txt = serialize($caaa);
var_dump($bin_txt);
echo "<hr>";
$caaa2 = unserialize($bin_txt);
var_dump($caaa2);
実行結果は以下の通り。
https://www.dogrow.net/php/sample/00051/test1.php
シリアライズしたデータが正しく復元できている。
2. シリアライズしたデータをDB保存する。
以下のPHP公式ページには、シリアライズしたデータのDB保存について注意書きがある。
http://php.net/manual/ja/function.serialize.php
serialize() の出力をデータベースに格納するときには、 通常は CHAR 型や TEXT 型ではなく BLOB 型を使わないといけません。
すなわち…
シリアライズしたデータを保存するためのカラムを作る時は BLOB 型でなければならない。
また、BLOBには以下のようにサイズの制約があるので注意すること。
大きなデータを TINYBLOB型のカラムに保存すれば溢れてしまう。
・TINYBLOB : ~255[byte]
・BLOB : ~64KB
・MEDIUMBLOB : ~16MB
・LONGBLOB : ~4GB
アクセス数(直近7日): ※試験運用中、BOT除外簡易実装済2025-12-09: 0回 2025-12-08: 1回 2025-12-07: 0回 2025-12-06: 4回 2025-12-05: 0回 2025-12-04: 0回 2025-12-03: 1回