PHP/MySQLi如果在执行复杂过程时发生崩溃,会发生什么情况?
我正在开发一个基于php/MySQLi的网站。我有一个问题,如果某个原因的页面在执行复杂的过程中崩溃,会发生什么。 例如:PHP/MySQLi如果在执行复杂过程时发生崩溃,会发生什么情况?,php,triggers,mysqli,rollback,Php,Triggers,Mysqli,Rollback,我正在开发一个基于php/MySQLi的网站。我有一个问题,如果某个原因的页面在执行复杂的过程中崩溃,会发生什么。 例如: if (get_message_call) { add something to table 1 add something to table 2 add something to table 3 ( based on some values inserted into table2 ) add something to table 4
if (get_message_call)
{
add something to table 1
add something to table 2
add something to table 3 ( based on some values inserted into table2 )
add something to table 4
etc...
}
我使用PHPmyAdmin(InnoDB)构建了数据库。但我还没有分配任何关系,因为主键/外键在理论上并没有起作用(也许我把它搞错了)
我的主要关注点是,如果某个原因的语句被中止(页面崩溃,松散连接等),在中间,让我们执行“添加到表3”。我猜第一条和第二条语句会被执行,而其他语句不会
确保不会发生这种情况的最佳方法是什么,因为它可能会弄乱其他表的键等。。我的解释可能有点模糊,但我希望有人能理解我的观点
我读过“存储过程和触发器中的回滚和提交”一文,但我不确定我是否理解正确
提前谢谢 如果是InnoDB,那么应该使用事务进行此类插入。有关更多信息,请参阅:
好吧,看起来没那么复杂。现在我松了一口气。谢谢你抽出时间。
CREATE DEFINER=`root`@`localhost` PROCEDURE `doSomething`(
IN input1 INT,
IN input2 VARCHAR(255),
IN input3 VARCHAR(100),
OUT output1 INT,
OUT output2 INT
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; END;
DECLARE EXIT HANDLER FOR SQLWARNING BEGIN ROLLBACK; END;
DECLARE EXIT HANDLER FOR NOT FOUND BEGIN ROLLBACK; END;
START TRANSACTION;
INSERT INTO table1 (column1, column2, column3) VALUES (input1, input2, NOW());
SET @new_row_id = LAST_INSERT_ID();
INSERT INTO table2 (column1, colum2) VALUES (@new_row_id, input3);
SET @other_new_row_id = LAST_INSERT_ID();
UPDATE table3 SET mycolumn = @other_new_row_id WHERE id = @new_row_id;
COMMIT;
SET output1 = @new_row_id;
SET output2 = @other_new_row_id;
END