シリアライズした行データの復元 @ Zend Framework

Zend FrameworkでのZend_Db_Table_Row_Abstract型、シリアライズ(serialize,unserialize)するとテーブルのmetaデータを無くしてしまいます。

マニュアルを見ると

復元した行は、なぜ切断された状態なのですか?

シリアライズしたオブジェクトは、可読形式の文字列となります。 データベースのアカウントやパスワードといった情報を 暗号化せずにプレーンテキストにシリアライズして保存すると、 セキュリティ上問題となります。 そのようなデータを無防備な状態でテキストファイルに保存したりしたくはないでしょう。 またメールなどで攻撃者に覗き見られることも好まないはずです。 シリアライズされたオブジェクトは、 正しい認証情報を知らない限りデータベースにアクセスすることはできません。

Zend Framework: Documentation

と書いてあります。ごもっとも。テーブルデータを取り戻すには、

[php]
$rowClone = unserialize($serializedRow);

$bugs = new Bugs();

// この行をテーブルに再接続し、
// データベースとの接続を復活させます
$rowClone->setTable($bugs);

// これで、行の内容を変更して保存することができます
$rowClone->bug_status = ‘FIXED’;
$rowClone->save();
[/php]

と、setTableで再接続させます。

rowsetごとキャッシュしてる場合は、

[php]
$rowset->setTable(new Bugs());
[/php]

と、rowsetにテーブルのインスタンスを渡してやれば、再接続します。

英語ではReactivating a Row as Live Dataなどと書かれていますね。

行データをキャッシュから戻した場合は、リアクティベイティング(←言いにくい)をお忘れ無く!

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください