PHP mysqli::autocommit VS “开始交易”

Posted

技术标签:

【中文标题】PHP mysqli::autocommit VS “开始交易”【英文标题】:PHP mysqli::autocommit VS "START TRANSACTION" 【发布时间】:2011-01-04 06:03:09 【问题描述】:

在我们的数据库层对象中,我们总是通过 mysqli::query 执行的“START TRANSACTION”、“ROLLBACK”和“COMMIT”SQL 语句来管理事务。

今天做一些研究,我发现this mention in the MySQL Manual 关于使用 API 级别调用来管理事务 VS 使用直接 SQL:

重要

许多用于编写 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 对应物更好。

【问题讨论】:

好问题,我没有完全按照提供的答案... 【参考方案1】:

可能存在数据访问包装器需要知道事务何时开始/结束的原因。例如,在我的脑海中,连接池方案必须知道以前使用的连接何时在事务中间完成,并且在这种情况下不将其返回到连接池以供重用。

我不知道mysqli 中有任何问题需要您使用本机方法而不是SQL 版本,但在一般情况下可能是这样……这就是为什么它只是“有时应该”。无论如何,PHP 方法比 SQL 字符串版本更容易阅读,所以我还是说去吧。

【讨论】:

以上是关于PHP mysqli::autocommit VS “开始交易”的主要内容,如果未能解决你的问题,请参考以下文章

mod_php vs cgi vs fast-cgi

PHP| PEAR:MDB2 vs PDO vs Native-PHP(原始)

vs怎么开发php

PHP 注释:# vs. //

PHP 注释:# vs. //

vs代码无法识别html中的php代码