2014-03-14 31 views
1

您可以原諒我,但據我所知,PDO beginTransaction用於測試所有必需的查詢,如果所有返回成功,它們都會被執行。 如果是的話,我想問你,如果我可以使用多個查詢,但不同類別的使用..PDO beginTransaction在不同的類

我有一個類的通知和一個類的關注者,在同一頁。 >插入Notification..Is可以使用的BeginTransaction還是我必須使用if(successNotification){然後執行 -

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->執行跟隨的same..what跟隨}?

+1

您是否嘗試閱讀有關交易的文檔?或者探索一些例子? – sectus

回答

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

+0

我可以從第一個查詢得到lastInsertId()..?我需要將其插入第二個... Like,插入通知,從通知中獲取ID,執行「follow」查詢 – DecoderNT

+0

如果只有*某種*方法來搜索文檔。 [PDO :: lastInsertID](http://www.php.net/manual/en/pdo.lastinsertid.php) –

相關問題