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