6.1.3. Transaktionen
Begriffserklärung
Transaktionsunterstützung in MySQL
| BEGIN | startet eine Transaktion |
| COMMIT | schließt eine Transaktion ab |
| ROLLBACK | macht bereits durchgeführte Schreiboperationen einer Transaktion rückgängig |
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()
Dietmar
Grunewald
Oktober 2006