提问人:Nate 提问时间:12/13/2014 最后编辑:Nate 更新时间:12/26/2014 访问量:940
PDO事务函数与MySQL事务语句?
PDO transaction functions vs MySQL transaction statements?
问:
PDO 提供启动、提交和回滚事务的功能:
$dbh->beginTransaction();
$sth = $dbh->prepare('
...
');
$sth->execute(); // in real code some values will be bound
$dbh->commit();
有什么理由使用PDO函数而不是简单地使用MySQL中的事务语句?即:
$sth = $dbh->prepare('
START TRANSACTION;
...
COMMIT;
');
$sth->execute(); // in real code some values will be bound
更新:只是给其他任何对此进行调查的人的注意,经过一些测试,我实际上发现上面的第二种情况(using 和 in)将导致抛出异常。因此,为了将事务与预准备语句一起使用,您必须使用第一种情况中所示的 PDO 函数。START TRANSACTION
COMMIT
prepare()
答:
PDO和mysql事务之间的区别不大。除了
例如,您可以启动您的事务,运行一些查询,运行一些php代码,根据您的代码进行更多查询等等,并且您可以在代码末尾回滚,只需执行这比创建2 - 3个查询要容易得多,而不是使用$PDO->rollback();
$pdo->beginTransaction();
此外,使用也短了几行,在我看来,它也比创建另一个查询并执行它更清晰。$pdo->rollback();
评论
从可移植性的角度来看,最好使用 PDO 提供的接口,以防您想使用不同的 DBMS,或者引入另一个习惯了另一个 DBMS 的团队成员。
例如,SQLite 使用的语法略有不同;如果要从 MySQL 移动到 SQLite 数据库,则必须更改 PHP 代码中包含该语句的每个字符串,因为它将不再是数据库的有效语法。SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 2014SQL Server 201START TRANSACTION;
当然,您也可以在MySQL中使用BEGIN
来启动事务,这在SQLite和SQL Server中可以正常工作。你可以用它来代替。
你通常能够找到一个你喜欢的语法,而且是相当可移植的,但如果你没有必要,为什么要花时间和精力去考虑它呢?利用有十几个 PDO 驱动程序的事实,让您的生活更轻松。如果您非常关心一致性,请优先使用 API 而不是特定于实现的 SQL 语法。
评论