1

予約を処理する次の表があります。

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によって管理されているSessionsテーブルへの外部キーです。

セッションを作成するときに問題が発生しました。同じスクリプト内で、Session_IDを使用してレコードを「Plots」(上記)に挿入しようとしました。これは、レコードがSessionsテーブルに存在しないためです。

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

4

1 に答える 1

1

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

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

于 2012-03-30T17:54:50.047 に答える