Mailinglisten-Archive |
Guten Morgen, ich wollte mal in diese Runde die Frage werfen, ob jemand schon mal Bedarf hatten über den Transaktionsstatus bescheid zu wissen und wie dies Problem gelößt wurde. Z.B. folgendes Konsturkt: Ein Objekt operiert auf einer Datenbank, ließt Werte aus und kann Werte zurück in die Datenbank schreiben. Diesem Objekt können weitere Objekte übergeben werden, welche sich genauso verhalten, sprich sie lesen und schreiben ebenfalls für sich in die Datenbank. Beim aufruf der Methode $obj->save() schreibt das Objekt nicht nur die neuen Werte in die DB sondern stellt auch sicher, dass die beherbergten Objekte dies auch tun, indem der Methodenaufruf an diese delegiert wird. Eine Möglichkeit wäre, sich die Tatsache zu nutze zu machen, dass PDO eine Exception auslößt, wenn PDO->beginnTransaction() aufgerufen wärend einer bestehenden Transaktion aufgerufen wird. Einfach mit try-catch abfangen und "schlucken". Finde ich aber nicht wirklich schön... Eine weitere Möglichkeit wäre die PDO Klasse zu erweitern. Z.B. class PDOe extends PDO { protected $_active_transaction = false; public function beginTransaction() { return $this->_active_transaction = parent::beginTransaction(); } public function commit() { $this->_active_transaction = false; return parent::commit(); } public function rollBack() { $this->_active_transaction = false; return parent::rollBack(); } public function hasTransaction() { return $this->_active_transaction; } } Die Methode PDO->getAttribute(PDO::ATTR_AUTOCOMMIT) hilft auch nicht wirklich weiter, da z.B. Postgres dieses Attribut nicht kennt. Eine Anfrage für eine solche Funktionalität gibt es bereits auch schon [1], nur scheinen die Entwickler es nicht sehr eilig mit der Umsetzung zu haben. Möglicherweise braucht man es auch nicht? Wie macht ihr das? [1] <http://pecl.php.net/bugs/bug.php?id=7718> vielen Dank und grüße Martin
php::bar PHP Wiki - Listenarchive