Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
2 insert queries wie transaktionen ablaufen lassen - Prinzip : ganz oder garnicht [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
2 insert queries wie transaktionen ablaufen lassen - Prinzip : ganz oder garnicht


 
KinNeko
02-01-2002, 00:39 
 
Hey..
ich möchte 2 Insert Query machen..dabei soll die 1. rückgängig gemacht werden wenn die 2. fehlschlägt..

Wie mache ich das ?

Bsp.:
1. INSERT INTO table1 VALUES (test)
2. INSERT INTO table2 VALUES (test)

Bei der zweiten Meldung ist 'test' bereits vorhanden..die spalte ist unique..und jetzt soll test auch aus der 1. Tabelle gelöscht werden.

 
JoelH
02-01-2002, 10:38 
 
vor dem INSERT kannst du mit einem SELECT prüfen ob test schon in der tab2 existiert, ist die der fall brauchst du beide INSERTS nicht.

Ansonsten kannst du natürlich auch schaun ob der zweite Query mit erfolg beendet wird. Kommt ein Fehler zurück dann kannst du auch die Nr. eins wieder löschen.

 
KinNeko
02-01-2002, 13:00 
 
Aber das Löschen muss ich dann 'manuell' (mit php) machen oder ?
Dafür gibt es nicht zufällig einen SQL Befehl ?

Wäre ja nicht sonderlich schwierig..aber ich will alles lieber den datenbank überlassen.

 
schmalle
02-01-2002, 14:05 
 
mysql_query("delete from tabelle where bla='blub' ");

 
KinNeko
02-01-2002, 18:11 
 
mysql_query(query1);
mysql_query(query2) or mysql_query("delete from tabelle where bla='blub' ") or die "Fuck..nichts geht ;)";

Jep..also keine MySQL Lösung :(

 
Titus
04-01-2002, 23:47 
 
Das letzte Problem das bleibt, ist wenn das Skript abbricht (zB weil der Webserver abstürzt), bevor die 2. Query abgeschickt wird.

 
JoelH
05-01-2002, 01:05 
 
das Problem ist das MySQL Transaktionen nur in geringem Maße unterstützt, bei sowas bietet sich dann eher Postgres an, es kommt halt darauf an wie zuverläsig es sein muss !

 
paddy
06-01-2002, 10:29 
 
$anfrage ="INSERT INTO table1 VALUES (test)";
If ($ergebnis=mysql_query($anfrage)) {
$anfrage2 ="INSERT INTO table2 VALUES (test)";
If ($ergebnis2 = mysql_query($anfrage2)) {
echo "beide Datensätze eingetragen";
} Else {
mysql_query("delete from tabelle1 where bla='blub' ");
echo "eintrag fehlgeschlagen";
}
} Else {
echo "Fehler=".mysql_error();
}


Wenn es funktioniert sag mal bescheid.

[Editiert von paddy am 06-01-2002 um 10:43]

 
KinNeko
06-01-2002, 14:21 
 
@paddy Das ist genau der Code den ich oben geschrieben habe..
Das mit dem 'or' ist ein kleiner Trick. Und zwar wertet PhP bei OR anweisungen erst den linken Teil aus. Wenn dieser bereits true ergibt ignoriert PhP den rechten Teil weil die Bedingung eh schon erfüllt ist. Er gibt der linke Teil false so wird auch der rechte ausgewertet und das script bricht mit 'die' ab..
=>
if(check($test)) { blah } else die "Fehler"; bewirkt dasselbe wie :
check($test) || die "Fehler";

Die die Funktion liefert bei erfolgreicher Ausführung ein true (1) zurück. 'ECHO' tut das allerdings nicht..dafür aber viele andere Funktionen.

@alle Gerade wegen dem Absturz wollte ich das ja der Datenbank überlassen. Konnte ja nicht wissen dass MySQL nicht alles erfüllt was wir in DB I gelernt haben. Theoretisch kann ich das ja selber programmieren..allerdings wäre das ein etwas zu hoher Aufwand.
Ich habe die Daten auch nur in 2 Tabellen aufgeteilt weil ich 2 Timestamp benutze. Wenn dass alles passiert hat halt man ein User nur Logindaten und keine Userdaten.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:58 Uhr.