繁体   English   中英

PHP使用try-catch进行多个数据库查询

[英]PHP using try-catch for multiple database queries

我正在尝试实现处理数据库错误的最佳方法。 我正在使用MVC框架(codeigniter)。 当我创建对象时,最终要对不同的表进行多个查询。

我遇到的问题是,如果第一个查询成功,而第二个查询失败,则会出现错误。 但是,第一个查询仍然成功,并且数据已经在该表中。

我要做的是将所有查询包装在try块中,这样,如果其中任何一个查询失败,则不会完成任何查询。

通过回滚更改,是否有更好的方法来处理这种情况(也许是特定于代码点火器)?

一个try块不会直接这样做。

您需要支持事务的表,即InnoDB表

首先,您需要将数据库表的数据库引擎更改为InnoDB(如果它们仍然是MyISAM)。

在数据库操作之前,您需要先启动事务(在线检查适合您的方法)。 我使用PDO,因此通常会这样做:

$pdoObject->startTransaction();

因此,从查询的返回值开始,如果查询成功,则继续下一个查询,否则将执行rollback()并结束执行。 此时,您的try ... catch可能有用,因为在查询执行失败的情况下,您可以决定引发Exception。 您抓到它并执行rollback()

如果一切成功,则需要执行commit()否则更改将不会得到反映

注意:只有InnoDB表支持MySQL中的事务

您正在寻找的是交易

但是,您必须确保所有表都使用InnoDB。

if ($this->db->trans_status() !== false) {
    // do stuff
}

是我用来验证交易的东西。 请注意,您还可以为测试模式发送布尔值:

$this->db->trans_start(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM