2012-03-30 113 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_Seesion和Zend_Session_SaveHandler_DbTable管理。

我在創建會話時出現問題,並且在同一個腳本中嘗試使用它的Session_ID將記錄插入到「Plots」(如上所示)中,因爲該記錄不存在於Sessions表中。

我可以強制Zend_Session_SaveHandler_DbTable將其數據保存到數據庫中嗎?如果是這樣,怎麼樣?

+0

您可以複製/粘貼您的application.ini或bootstrap(初始化會話的位置)。 – Liyali 2012-03-30 17:08:59

回答

1

查看PHP的session_write_close()/ session_commit()。這將寫入會話數據和結束會話。

另外爲什麼在Plots上工作失敗? FK限制或什麼?你知道session_id,它只是不在數據庫中。但是你知道插入的時候會是什麼樣的(假設會話按照預期關閉)。不理想我想,但可行。

+0

在ZF中,您可以調用'Zend_Session :: writeClose()',它最終會調用'session_write_close()'。如果操作很勇敢,他可以手動調用'Zend_Session_SaveHandler_DbTable :: write($ id,$ data)',但我認爲'$ data'的序列化可能會有一些無法預料的影響,所以最好使用標準'session_write_close'。如果您仍然需要向其寫入數據,則可以在關閉後立即重新啓動會話。 – drew010 2012-03-30 17:58:17

+0

畫了,你上面的評論是我正在尋找的答案,但我不能接受它作爲答案。如果你想獲得信貸,請將你的評論轉換爲答案,我會將其標記爲已接受,否則,我只會接受ficuscr的回答。 – Travis 2012-04-02 18:00:36

相關問題