Toon posts:

[PHP] Transactie met PDO doet niet wat ik verwacht

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen,

Ik heb een script geschreven voor het aanmaken van een nieuwe pagina record, gezien er hiervoor update en insert query's worden gebruikt maak ik gebruik van de PDO transactie methods. Nu ik de transacties test (door de insert een verkeerde syntax te geven) blijft de DB tabel hangen en moet ik mysql opnieuw opstarten. Ook de rollback functie wordt niet uitgevoerd, waardoor de updates wel records wijzigen maar de insert niet is uitgevoerd en mijn samenhang van de Lft en Rgt waardes in de tabel niet meer kloppen. Ik heb de volgende code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$this->m_oDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    try {
        $this->m_oDB->beginTransaction();
        $this->m_oDB->exec('LOCK TABLE pages WRITE;');
        $this->m_oDB->exec('UPDATE pages SET Rgt = Rgt + 2 WHERE Rgt > '.$nRgt.';');
        $this->m_oDB->exec('UPDATE pages SET Lft = Lft + 2 WHERE Lft > '.$nRgt.';');
        $this->m_oDB->exec('INSERT INTO pages(PageTitle, Lft, Rgt, PageKeywords) VALUES("'.$p_sPageName.'", '.$nRgt.' + 1, '.$nRgt.' + 2, "'.$p_sKeywords.'", "'.$p_bActive.'");');
        $this->m_oDB->exec('UNLOCK TABLES;');
        $this->m_oDB->commit();
    } catch (PDOException $e)   {
        $this->m_oDB->rollBack();
        //exception handeling
        $sTime = date('d').'-'.date('m').'-'.date('y').' om '.date('H').':'.date('i');
        error_log($sTime.': '.$e->getMessage()."\n", 3, 'exceptions/log.txt');
        $oEmail = new clsEmail();
        $oEmail->mailException($sTime, $e->getMessage(), '***');
        $aErrors[] = 'De database transactie is niet uitgevoerd voor de pagina '.$p_sPageName.'. De database geeft de volgende foutmelding terug:'. "\n" . $e->getMessage();
    }


Ziet iemand of ik misschien iets fout doe? De mysql versie is 5.1. Volgens de PDO handleiding is mijn syntax goed, dus zal er iets anders fout zijn, maar ik kan niks vinden?