有没有办法强制Zend_Session_SaveHandler_DbTable先写入数据库?

时间:2012-03-30 16:48:00

标签: zend-framework zend-session

我有下表处理预留:

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”是我的Sessions表的外键,由Zend_Session和Zend_Session_SaveHandler_DbTable管理。

我在创建会话时遇到问题,并且在同一个脚本中,尝试使用它的Session_ID将记录插入“Plots”(如上所示),因为Sessions表中不存在该记录。 / p>

我可以强制Zend_Session_SaveHandler_DbTable将其数据先前保存到数据库中吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

请参阅PHP的session_write_close()/ session_commit()。这将写入会话数据和结束会话。

或者为什么在Plots上工作失败? FK约束还是什么?你知道session_id,它还没有在数据库中。但是你知道插入时它会是什么(假设会话按预期关闭)。我觉得不太理想但可行。