在我们的数据库层对象中,我们始终使用mysqli :: query执行“START TRANSACTION”,“ROLLBACK”和“COMMIT”SQL语句来管理事务。
今天做了一些研究,我发现this mention in the MySQL Manual关于使用API级别调用来使用直接SQL来管理事务VS:
重要
许多用于编写MySQL的API 客户端应用程序(例如JDBC) 提供自己的启动方法 可以(有时候)的交易 应该)而不是发送一个 来自的START TRANSACTION声明 客户。请参见第20章,连接器和 API,或您的文档 API,了解更多信息。
然后,仔细观察mysqli,找到了mysqli :: autocommit,mysqli :: rollback和mysqli :: commit方法来管理事务(http://us.php.net/manual/en/class.mysqli.php)。
我的问题:使用这些mysqli等价物更好吗?为什么?我无法在任何地方找到任何说明这些函数是否或为何比其直接SQL对应程序更好的表现。
答案 0 :(得分:5)
可能存在数据访问包装器在启动/结束事务时需要知道的原因。例如,在我的脑海中,连接池方案必须知道在事务中间何时完成了先前使用的连接,并且在这种情况下不将其返回到连接池以便重新使用。
我不知道mysqli
中需要您使用本机方法而不是SQL版本的任何问题,但它可能在一般情况下......这就是为什么它只是“有时应该” 。在任何情况下,PHP方法都比SQL字符串版本更容易阅读,所以无论如何我都会说这个。