gpt4 book ai didi

php - PDO 事务函数与 MySQL 事务语句?

转载 作者:可可西里 更新时间:2023-11-01 06:32:24 25 4
gpt4 key购买 nike

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

更新: 只是给其他调查此问题的人的注意事项,经过一些测试后我实际上发现上面的第二种情况(在 START TRANSACTION 中使用 COMMITprepare() )将导致抛出异常。因此,为了在准备好的语句中使用事务,您必须使用第一种情况中显示的 PDO 函数。

最佳答案

从可移植性的角度来看,您最好使用 PDO 提供的接口(interface),以防您想要使用不同的 DBMS,或者引入另一个习惯了另一个 DBMS 的团队成员。

例如,SQLite uses a slightly different syntax ;如果您要从 MySQL 迁移到 SQLite 数据库,则必须更改 PHP 代码中包含语句 START TRANSACTION; 的每个字符串,因为它不再是您数据库的有效语法。 SQL Server 2014是另一个不使用此语法的示例。

当然,you can also use BEGIN; in MySQL启动事务,这在 SQLite 和 SQL Server 中可以正常工作。您可以改用它。

您通常可以找到自己喜欢的语法,而且它的移植性还算不错,但如果不需要的话,为什么还要花时间和精力去考虑它呢?利用有 a dozen PDO drivers 的事实可让您的生活更轻松。如果您非常关心一致性,请选择 API 而不是特定于实现的 SQL 语法。

关于php - PDO 事务函数与 MySQL 事务语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27458945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com