ERLEDIGT
NEIN
NEIN
ANTWORTEN
0
0
ZUGRIFFE
1730
1730
EMPFEHLEN
-
Hi,
Mein DBMS und PHP:
MySQL 5.0.13
PHP 5.0.1
Problem:
Ich habe eine Transaction mit Commit/Rollback ausgestattet um Transaktionssicherheit zu gewährleisten.
Hier der Code:
Ich habe mich hier an Tipps von hpvw und die MySQL References gehalten.PHP-Code:// Hilfsvariable für SQL Error
// ------------------------------------------------------------------
$transactionError=false;
// 1. Tabellen für Transaktion sperren und Transaktion starten
//-------------------------------------------------------------------
$sql = 'LOCK TABLES tbl_product_category write';
$this->_db->query($sql);
$sql = 'SET AUTOCOMMIT=0';
$this->_db->query($sql);
$sql = 'START TRANSACTION';
$this->_db->query($sql);
// 2. Platz für den neuen Knoten erzeugen
//-------------------------------------------------------------------
$sql = ' UPDATE '
. ' `tbl_product_category` '
. ' SET '
. ' `product_category_rgt_order`=(`product_category_rgt_order`+2) '
. ' WHERE `product_category_rgt_order`>=\''.$startParentNodeRgt.'\'; ';
$result=$this->_db->query($sql);
if (PEAR::isError($result)) {
$transactionError=true;
$this->error->addErrorMessage("<strong>".$this->language->getStaticText('ERROR_11').":</strong><br>".$result->toString());
}
$sql = ' UPDATE '
. ' `tbl_product_category` '
. ' SET '
. ' `product_category_lft_order`=(`product_category_lft_order`+2) '
. ' WHERE `product_category_lft_order`>=\''.$startParentNodeRgt.'\'; ';
$result=$this->_db->query($sql);
if (PEAR::isError($result)) {
$transactionError=true;
$this->error->addErrorMessage("<strong>".$this->language->getStaticText('ERROR_11').":</strong><br>".$result->toString());
}
// 2. Neuen Knoten in die Datenbank einfügen
//-------------------------------------------------------------------
$sql = ' INSERT INTO '
. ' `tbl_product_category` '
. ' (`product_category_lft_order`, `product_category_rgt_order`, `testtext`) '
. ' VALUES '
. ' (\''.$startParentNodeRgt.'\', \''.($startParentNodeRgt+1).'\', \''.$nodeName.'\'); ';
$result=$this->_db->query($sql);
if (PEAR::isError($result)) {
$transactionError=true;
$this->error->addErrorMessage("<strong>".$this->language->getStaticText('ERROR_11').":</strong><br>".$result->toString());
}
if ($transactionError) {
$sql = 'ROLLBACK';
$this->_db->query($sql);
$sql= 'SET AUTOCOMMIT=1';
$this->_db->query($sql);
$sql= 'ULOCK TABLES';
$this->_db->query($sql);
return false;
} else {
$sql = 'COMMIT';
$this->_db->query($sql);
$sql= 'SET AUTOCOMMIT=1';
$this->_db->query($sql);
$sql= 'ULOCK TABLES';
$this->_db->query($sql);
return true;
}
Der Code funktioniert soweit perfekt.
ABER:
Wenn ich mir die Laufzeitinformationen von MySQL ansehe, finde ich folgendes (zur Info: Ich verwende die neueste Version von phpMyAdmin):
lock tables 0 0,00 0,00 %
begin 0 0,00 0,00 %
commit 0 0,00 0,00 %
rollback 0 0,00 0,00 %
Jetzt stellt sich mir die Frage:
Warum sehe ich die Commits etc. nicht bei den Laufzeitinformationen?
Habe ich einen Fehler im Aufbau der Transaktion? Für mich ist das alles irgendwie unlogisch. Vor allem deshalb, weil der Commit offensichtlich ausgeführt wird.
Habt Ihr einen Plan, was hier das Problem sein könnte? Oder kennt Ihr eine ander Möglichkeit um zu prüfen, ob die Transaktion wirklich transaktionssicher abgewickelt wird?
Ciao,
Mike
Ähnliche Themen
-
Commit und Rollback
Von zuckerbrini im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 19.11.08, 13:31 -
Transactions, Commit, Rollback...
Von jazy jaf im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 12.02.07, 15:25 -
Rollback mit CMT?
Von tobiaft im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 6Letzter Beitrag: 20.06.06, 19:21 -
Oracle 9.2.0.6i; Auto Commit
Von tplanitz im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 26.12.05, 20:21 -
automatisches Rollback
Von Greenhorn_80 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 10.05.05, 21:50





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren