Zum Inhalt springen

Werte mit UPDATEquery erhöhen klappt zu gut

Erstellt am 3. April 2009 · 2 Antworten · letzte Antwort am 6. April 2009

Tags: PHP, Datenbank, Frage

j.​bort ·

Hallo ihr Lieben,

ich benötige ein paar Ideen, wo ich noch nach dem Fehler suchen kann :-(

Ich möchte ein int-Feld in der Datenbank um eins erhöhen. Dafür benutze ich die Zeile:

$GLOBALS['TYPO3_DB']->exec_UPDATEquery('tx_tabelle',' uid='.$this->piVars['ext_id'].' ',array('shown'=>$row['shown']+1));

Eigentlich keine große Sache - Aber...es wird immer nicht plus eins sondern plus zwei in die Tabelle geschrieben.

Ich habe also den Wert von $row['shown'] direkt vor dem Update ausgeben lassen - der stimmt aber mit dem aktuellen Wert in der Tabelle überein -> 41.

Dann habe ich mir das SQL im Browser mit

print $GLOBALS['TYPO3_DB']->UPDATEquery('tx_tabelle',' uid='.$this->piVars['ext_id'].' ',array('shown'=>$row['shown']+1));

ausgeben lassen und das stimmt auch:

UPDATE tx_tabelle SET shown='42' WHERE uid=1

Nach dem Ausführen des Update habe ich allerdings 43 in der Tabelle stehen!

Wo kann ich hier noch nach dem Fehler suchen?! Was könnte dieses eigenmächtige Vorgehen erklären?

Besten Dank an euch!

digedag ·

Tja dann kann es ja eigentlich nur daran liegen, daß aus irgendeinem Grund der Request doppelt abgesetzt wird.

Die Zählung ist übrigens sowieso nicht sicher, weil du vorher den aktuellen Wert erst aus der Datenbank lädst. Bei zwei parallelen Requests würde somit der Wert nur einmal erhöht, weil beide den gleichen alten Wert auslesen.

Diese Methode sollte effektiver sein:

$GLOBALS['TYPO3_DB']->exec_query('UPDATE tx_tabelle SET shown=shown+1 WHERE uid='.intval($this->piVars['ext_id']));
j.​bort ·

Habe die Abfrage entsprechend geändert - allerdings hat es am eigentlichen Problem nichts geändert.

Werd ich wohl noch mal suchen müssen.. dennoch danke für deinen Hinweis.