Transaction mit MySQL und PHP

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Transaction mit MySQL und PHP

Postby sugusmuc » 16. October 2008 19:07

Hi all,

bin gefrustet.
Folgendes Problem: Ich möchte in die MySQL-Tabelle VERTRAG einen Vertrag schreiben und in die Tabelle PERSONEN die dzugehörigen Personen (1 bis x).
Wenn beim Eintragen der Personen ein Fehler auftaucht, möchte ich auch den Vertrag wieder verwerfen, also ein Rollback machen.

Soweit eigentlich ganz einfach.

Ich hab nun schon einiges gefunden, dem ich entnehmen konnte, dass es in MySQL eben nicht so einfach ist, und habe folgendes gemacht:

1. my.ini bearbeitet, Settings nun:

#skip-innodb
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = F:/Filesharing/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = F:/Filesharing/xampp/mysql/data/
innodb_log_arch_dir = F:/Filesharing/xampp/mysql/data/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
# Set .._log_file_size to 25 % of buffer pool size
set-variable = innodb_log_file_size=5M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(Ich hab einfach mal die Vorgabewerte genommen)

2. MySQL neu gestartet

3. Die beiden Tabellen umgewandelt in INNODB
ALTER TABLE VERTRAG ENGINE = INNODB;
ALTER TABLE PERSONEN ENGINE = INNODB;

4. Statt der mysql-Library die mysqli-Library verwendet.
Skript sieht nun - stark vereinfacht - so aus:

$conn = mysqli_connect($db_server, $db_user, $db_pwd, $db);
$result = mysqli_autocommit($conn, FALSE);

$result = mysqli_query($link, "INSERT INTO VERTRAG (ID) VALUES (1)");

if(!$result) {
... blabla...
}

$result = mysqli_query($link, "INSERT INTO PERSON (ID, NAME) VALUES (1, 'MÜLLER')");

if(!$result) {
$errmsg = "blablabla... .wird im Fehlerfall brav ausgegeben";
$zurueck = mysqli_rollback($conn); //liefert im Fehlerfall brav "1" zurück
} else {
$ok = mysqli_commit($conn);//wird im Fehlerfall nicht ausgegeben
}


FAZIT: ROLLBACK funktioniert trotzdem nicht (auch nicht mit einem anderen Skript, out of the box von der php-Site genommen und getestet).
Das heißt, meine Verträge stehen in der Datenbank, die Personen dazu nicht :-(((

Konfiguration:
Windows2000, Apache HTTPD 2.2.9, MySQL 5.0.67, PHP 5.2.6

Danke vorab für hilfreiche Tips!!!

Grüße, Sugus
sugusmuc
 
Posts: 64
Joined: 19. August 2004 16:57
Operating System: Linux Suse 64-bit 11 SP 2

Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 14 guests