在我们的数据库层对象中,我们一直使用通过 mysqli::query 执行的“START TRANSACTION”、“ROLLBACK”和“COMMIT”SQL 语句来管理事务。
今天做了一些研究,我发现了this mention in the MySQL Manual关于使用 API 级调用来管理事务 VS 使用直接 SQL:
Important
Many APIs used for writing MySQL client applications (such as JDBC) provide their own methods for starting transactions that can (and sometimes should) be used instead of sending a START TRANSACTION statement from the client. See Chapter 20, Connectors and APIs, or the documentation for your API, for more information.
并且,在仔细查看 mysqli 后,发现了用于管理事务的 mysqli::autocommit、mysqli::rollback 和 mysqli::commit 方法 (http://us.php.net/manual/en/class.mysqli.php)。
我的问题:使用这些 mysqli 等效项是否更好,为什么?我找不到任何地方说明这些函数是否或为什么比它们的直接 SQL 对应函数执行得更好。
最佳答案
可能有一些原因导致数据访问包装器需要知道事务何时开始/结束。例如,在我的脑海中,连接池方案必须知道先前使用的连接何时在事务中间完成,并且在这种情况下不会将其返回到连接池以供重新使用。
我不知道 mysqli
中有任何问题需要您使用 native 方法而不是 SQL 版本,但在一般情况下可能...这就是为什么它只是“有时应该”。在任何情况下,PHP 方法都比 SQL 字符串版本更容易阅读,所以无论如何我还是要接受它。
关于PHP mysqli::自动提交 VS "START TRANSACTION",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2050310/