2012-03-30 15 views
0
は私がreserverationsを処理し、次の表に持って

:あなたが見ることができるようにZend_Session_SaveHandler_DbTableを強制的にデータベースに書き込む方法はありますか?

CREATE TABLE `Plots` (
    `Plot_ID` int(11) NOT NULL AUTO_INCREMENT, 
    `Grid_ID` int(11) NOT NULL DEFAULT 0, 
    `Instance_ID` int(11) NOT NULL DEFAULT 0, 
    `Session_ID` char(32) DEFAULT NULL, 
    `User_ID` int(11) DEFAULT NULL, 
    `Transaction_ID` int(11) DEFAULT NULL, 
    `CreateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `UpdateDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `Plot` varchar(10) NOT NULL DEFAULT 0, 
    `ReserveDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `ReservationTimeoutDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `PurchaseDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`Plot_ID`), 
    CONSTRAINT `Plots_ibfk_1` FOREIGN KEY (`Grid_ID`) REFERENCES `Grids` (`Grid_ID`) ON DELETE NO ACTION ON UPDATE CASCADE, 
    CONSTRAINT `Plots_ibfk_2` FOREIGN KEY (`Instance_ID`) REFERENCES `Instances` (`Instance_ID`) ON DELETE NO ACTION ON UPDATE CASCADE, 
    CONSTRAINT `Plots_ibfk_3` FOREIGN KEY (`Session_ID`) REFERENCES `Sessions` (`Session_ID`) ON DELETE SET NULL ON UPDATE CASCADE, 
    CONSTRAINT `Plots_ibfk_4` FOREIGN KEY (`User_ID`) REFERENCES `Users` (`User_ID`) ON DELETE NO ACTION ON UPDATE CASCADE, 
    CONSTRAINT `Plots_ibfk_5` FOREIGN KEY (`Transaction_ID`) REFERENCES `Transactions` (`Transaction_ID`) ON DELETE NO ACTION ON UPDATE CASCADE 
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; 

を、「SESSION_IDは」にZend_SessionとZend_Session_SaveHandler_DbTableによって管理されている私のセッションテーブルへの外部キーです。

セッションを作成するときに問題が発生していますが、同じスクリプト内でSession_IDを使用してセッションが「Plots」(上の図)にレコードを挿入しようとしています。

Zend_Session_SaveHandler_DbTableを強制的に以前のデータをデータベースに保存することはできますか?もしそうなら、どうですか?

+0

application.iniまたはブートストラップ(セッションを初期化する場所)をコピー/貼り付けできますか? – Liyali

答えて

1

PHPのsession_write_close()/ session_commit()を参照してください。これにより、セッションデータが書き込まれ、セッションが終了します。

なぜ、プロットの作業が失敗するのですか? FKの制約か何か?あなたはsession_idを知っています。ちょうどデータベースにはまだありません。しかし、挿入されたときの内容は分かります(セッションが正常に終了したと仮定して)。理想的ではないと思いますが、実行可能です。

+0

ZFでは、最終的に 'session_write_close()'を呼び出す 'Zend_Session :: writeClose()'を呼び出すことができます。もしオペラが勇気があれば、手動で 'Zend_Session_SaveHandler_DbTable :: write($ id、$ data)'を呼び出すことができますが、 '$ data'のシリアライゼーションには予期せぬ影響があると思われますので、標準'session_write_close'です。それでもまだデータを書き込む必要がある場合は、closeを呼び出した直後にセッションを再開することができます。 – drew010

+0

が返答しました。上記のあなたのコメントは私が探していた答えですが、私はそれを答えとして受け入れることはできません。あなたがクレジットをしたい場合は、あなたのコメントを答えに移して、私はそれを受け入れられたものとしてマークします、そうでなければ、私はficuscrの答えを受け入れます。 – Travis

関連する問題