Update: update Spalte gleichzeitig als WHERE Bedingung

Steusi

Nasenbär
Hallo Leute, ich habe ein Problem bei einer einfachen Updatefunktion.

PHP:
			$db_update = "UPDATE ".$_SESSION['db_tab']." ". 	
					"SET data='".$found[$i]."' ".
					"WHERE data = '".$eintrag_in_DB[$i]."'";
									
			$eintragen = mysql_query($db_update) or die("Update-error: ". mysql_error());

$db_update enthält folgendes:
string(712) "UPDATE daten2009 SET data='Hasenbraten' WHERE data = 'Hasen'"

Hab ich mal gekürzt.

Es wird alles normal ausgeführt, keine Fehlermeldung. Jedoch wird aus meinem "Hasen" kein "Hasenbraten" ?
 
Hi,

@kuddeldaddeldu: bei einem update (DML) sollte doch eine Transaktion durchgeführt werden. Die Daten werden in der Session verändert, habe ich was übersehen? Macht man das bei mySQL nicht so? Ich habe da nicht so viel Erfarung, kannst Du mich aufklären? ;o)

Grüße
 
Hallo!

Also ich kann da jetzt auch kein Fehler finden.....

Allerdings fallen mir 2 Dinge auf:
1. führst Du das Update scheinbar in einer Schleife aus (was ansich eigentlich kein Problem ist).
2. nimmts Du für SET und die WHERE-Klausel die gleiche Spalte.
Ich habe dazu jetzt auf die schnelle zwar keine Hinweise gefunden, aber möglicherweise könnte dieses ein Problem sein/werden.

Zumal ich es für recht mutig halte das Update auszuführen ohne eindeutig zu bestimmen welcher Datensatz geändert werden soll.
Schliesslich könnte es ja auch mal sein dass es mehrere Datensätze gibt bei denen in der Spalte "data" der Wert "Hasen" vorkommt.
Dieses könnte früher oder später zu ungewollten Problemen führen.
Darum würde ich Dir anraten den Datensatz, wie es auch allgemein üblich ist, anhand der ID eindeutig zu identifizieren.

Gruss Dr Dau
 
Hi.
2. nimmts Du für SET und die WHERE-Klausel die gleiche Spalte.
Das sollte überhaupt kein Problem darstellen.
Zumal ich es für recht mutig halte das Update auszuführen ohne eindeutig zu bestimmen welcher Datensatz geändert werden soll.
Schliesslich könnte es ja auch mal sein dass es mehrere Datensätze gibt bei denen in der Spalte "data" der Wert "Hasen" vorkommt.
Genau das ist ja der Sinn: es sollen alle diese Datensätzen geändert werden, nicht nur ein einzelner.

Gruß
 
Hi,

@kuddeldaddeldu: bei einem update (DML) sollte doch eine Transaktion durchgeführt werden. Die Daten werden in der Session verändert, habe ich was übersehen? Macht man das bei mySQL nicht so? Ich habe da nicht so viel Erfarung, kannst Du mich aufklären? ;o)

Er verwendet nur einen Wert aus der PHP-Session als Tabellennamen.
Wenn diese UPDATE-Statements, die durch die Schleife generiert werden, eine Transaktion bilden sollen, kann man das machen. Muss man aber nicht und macht er auch nicht. [phpf]mysql_query[/phpf] führt die Abfrage sofort aus. Um mit Transaktionen zu arbeiten, müsste man schon die MySQLi-Erweiterung oder z.B. PDO benutzen.

LG

PS.: Sorry für die späte Rückmeldung...
 

Neue Beiträge

Zurück