6.1.3. Transaktionen

Begriffserklärung

Transaktionsunterstützung in MySQL


define("MYSQL_HOST","mysql.hrz.tu-chemnitz.de");
define("MYSQL_DB","wb");
define("MYSQL_USER","wbdgr");
define("MYSQL_PASSWD","Denkste!");

function dbt ($cmd) {

  global $link;

  if($cmd == 'BEGIN') {
    $link=mysql_connect(MYSQL_HOST,MYSQL_USER,MYSQL_PASSWD);
    if(!$link) {
      echo("<p>keine Verbindung (Login) zum MySQL-Server möglich!");
      return(0);
    }
  }
  if(mysql_select_db(MYSQL_DB,$link) == FALSE) {
    echo ("<p>kann Datenbank nicht benutzen!");
    return(0);
  };
  $result=mysql_query($cmd,$link);
  if(!$result) {
    echo ("<p>");
    echo mysql_error();
    return(0);
  }
  $id=mysql_insert_id($link);
  if($id == 0) $id = -1;
  if($cmd == 'COMMIT' || $cmd == 'ROLLBACK') mysql_close($link);
  return($id);
}



require ("./html_funktionen.php");
require ("./db_transaction_funktion.php");
require ("./db_schreibfunktion.php");
require ("./db_lesefunktion.php");

$cmd[1]="insert into testperson values(1,'Roy','Beer','(0371)-720734')";
$cmd[2]="insert into testperson values(2,'Martha','Pfahl','(0371)-520611')";
$cmd[3]="insert into testperson values(3,'Polly','Dick','0815')";
$cmd[4]="insert into testperson values(4,'Axel','Schweiss','4711')";
$cmd[5]="insert into testperson values(5,'Wilma','Streit','31724')";
$cmd[6]="insert into testperson values(6,'Martha','Pfahl','(0371)-520611')";

print_header("Test");
if(isset($_POST['loesche'])) {
  $r=dbw("delete from testperson");
  if($r == 0) {
     echo("die Daten der Tabelle  testperson konnten nicht gelöscht werden!");
     print_footer();
     exit;
  }
}
$r=dbt("BEGIN");
if($r == 0) {
   echo("Transaktion kann nicht gestartet werden");
   print_footer();
   exit;
}
$error=0;
for($i=1; $i <= 6; $i++) {
  if(!isset($_POST["cmd$i"])) continue;
  $r=dbt($cmd[$i]);
  if($r != 0) {
    echo("<br>$i erfolgreich ");
  } else  {
    echo("<br>$i gescheitert ");
    $error=1;
    break;
  }
}
if($error == 0) {
  $r=dbt("COMMIT");
  if($r == 0) {
    echo("Transaktion kann nicht beendet werden");
    print_footer();
    exit;
  }
} else {
  $r=dbt("ROLLBACK");
  if($r == 0) {
     echo("Transaktion kann nicht rückgängig gemacht werden");
     print_footer();
     exit;
  }
}
dbf("select * from testperson order by 1");
tabelle();
print_footer();


Test der Funktion dbt()

Tabelle testperson vor der Transaktion löschen
nachfolgende Kommandos als eine Transaktion ausführen:
insert into testperson values(1,'Roy','Beer','(0371)-720734')
insert into testperson values(2,'Martha','Pfahl','(0371)-520611')
insert into testperson values(3,'Polly','Dick','0815')
insert into testperson values(4,'Axel','Schweiss','4711')
insert into testperson values(5,'Wilma','Streit','31724')
insert into testperson values(6,'Martha','Pfahl','(0371)-520611')


Dietmar Grunewald
Oktober 2006