2009/11/17 火曜日

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

Filed under: Zend Framework — ne-zu @ 19:53:33 このエントリをはてなブックマークに追加

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

マニュアルを見ると

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

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

Zend Framework: Documentation

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

PHP:
  1. $rowClone = unserialize($serializedRow);
  2.  
  3. $bugs = new Bugs();
  4.  
  5. // この行をテーブルに再接続し、
  6. // データベースとの接続を復活させます
  7. $rowClone->setTable($bugs);
  8.  
  9. // これで、行の内容を変更して保存することができます
  10. $rowClone->bug_status = 'FIXED';
  11. $rowClone->save();

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

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

PHP:
  1. $rowset->setTable(new Bugs());

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

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

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

関連する記事:

Powered by

コメント (0) »

この記事にはまだコメントがついていません。

コメント RSS トラックバック URL

コメントをどうぞ

Powered by PHP-SeeD and WordPress ME