PDO beginTransaction对不同的类

时间:2014-03-14 01:01:08

标签: php class pdo

你可以原谅我,但据我所知,PDO beginTransaction用于测试所有必需的查询,如果所有返回成功,它们都被执行......我是对的吗? 如果是的话,我想问你是否可以在多个查询中使用它,但是不同的类...

我在同一页面上有一个通知类和一个类跟随者。

class Notifications{

    private $pdo;
    public $now;

public function __construct(){
    $now=time();
    $db = Database::getInstance();
    $this->pdo = $db->getConnection();
}

////////////INSERT NOTIFICATIONS/////////////////////
    public function InsertNoti($toid, $title, $description, $link){
    $sql = "blah blah";
    $result = $this->pdo->prepare($sql);
    $result->execute(array(':toid'=>$toid));
    }
}

并遵循相同的......我想要的是beginTransaction->如果成功,请执行Follow - >插入通知..是否可以使用beginTransaction或者我必须使用if(successNotification){然后执行follow}?

1 个答案:

答案 0 :(得分:0)

没有。 PDO :: beginTransaction()启动一个事务。事务中的每个SQL语句通常都是执行,未经过测试。如果它们都没有失败,则所有这些都会同时提交或回滚。提交和回滚都可能导致错误,您需要陷阱和处理。

开始事务后,PDO对象将等待您发出PDO :: commit()或PDO :: rollback()。尽管您希望在尽可能短的时间内保持交易开放,但在开始和结束交易之间做什么并不重要。您只需要小心不要做任何导致隐式提交的事情。例如,在MySQL中,事务中的任何DDL都将提交事务。

你并不清楚你正在尝试做什么,但其中一个似乎很可能。 (伪代码,为简单起见省略了错误处理。)

begin transaction
insert notification
commit
if no errors, then
begin transaction
insert follow
commit

begin transaction
insert notification
insert follow
commit

您应该仔细阅读PDO docs about transactions