Edit: Problem hat sich geändert, neues (altes) Problem ab hier.
Hallo!
Ich habe hier vor mir eine Tabelle, in der ich in einer Spalte zwei Zeilen tauschen will. Da die Spalte dazu Unique ist, muss ich den kleinen Umweg gehen, dass ich einen Wert vorher auf einen nicht existenten Wert setze. Das ganze sieht dann so aus:
(Beispielcode)
Das Feld order ist vom Typ SmallInt.
Im PHP Code werden diese Anweisungen eine nach der anderen direkt hintereinander ausgeführt.
Jetzt ist mein Problem, dass in dieser Kombination dort oben keine einzige Update-Anweisung durchgeführt wird. Also, es findet keinerlei Änderung statt.
Sehr misteriös finde ich dann den Effekt, dass wenn ich obige Updates in PHPMyAdmin kopiere, und sie dort alle gleichzeitig ausführen lasse (obiger Befehle, jeweils mit ; am Ende) funktioniert das Problemlos.
Wenn ich jetzt meinen PHP Code nehme, und eine (beliebige soweit ich das sehe, aber auf jeden Fall wenn ich die dritte..) rausstreiche, werden die anderen beiden Anweisungen ausgeführt - allerdings jede direkt 8 mehrmals n(8 mal). Der PHP Code an der entsprechenden Stelle sieht wie folgt aus:
$this->varDatabaseClass->dbQuery ist ein dbQuery nach dem Schema des Snippets aus dem Snippet-Thread, $orderList und $idList enthalten jeweils zwei Werte, wie sie auch in den obigen Querys eingesetzt sind. Die Konstante stimmt auch.
So, und was mich jetzt letztlich am meisten fasziniert: Wenn ich alle drei Updates laufen lasse, dann ändert er das Order-Feld nicht. Das last_edit-Feld wird aber in jedem Fall erneuert.
Lasse ich den dritte Query weg, habe ich in einem Feld eine -1 stehen, und im zweiten die neue Order-Nummer.
So.. jetzt die simple Frage: Was mache ich falsch? Ich sitz da jetzt seit zwei Stunden vor, aber ich kriege es nicht hin, dass der alle drei ausführt, bis auf in PHPMyAdmin.. bin total am verzweifeln mittlerweile..
Hallo!
Ich habe hier vor mir eine Tabelle, in der ich in einer Spalte zwei Zeilen tauschen will. Da die Spalte dazu Unique ist, muss ich den kleinen Umweg gehen, dass ich einen Wert vorher auf einen nicht existenten Wert setze. Das ganze sieht dann so aus:
Code:
UPDATE `gallery` SET `order` = -1 WHERE `id` = 4;
UPDATE `gallery` SET `order` = 3, `last_edit` = 1233622674 WHERE `id` = 5;
UPDATE `gallery` SET `order` = 4, `last_edit` = 1233622674 WHERE `id` = 4;
Das Feld order ist vom Typ SmallInt.
Im PHP Code werden diese Anweisungen eine nach der anderen direkt hintereinander ausgeführt.
Jetzt ist mein Problem, dass in dieser Kombination dort oben keine einzige Update-Anweisung durchgeführt wird. Also, es findet keinerlei Änderung statt.
Sehr misteriös finde ich dann den Effekt, dass wenn ich obige Updates in PHPMyAdmin kopiere, und sie dort alle gleichzeitig ausführen lasse (obiger Befehle, jeweils mit ; am Ende) funktioniert das Problemlos.
Wenn ich jetzt meinen PHP Code nehme, und eine (beliebige soweit ich das sehe, aber auf jeden Fall wenn ich die dritte..) rausstreiche, werden die anderen beiden Anweisungen ausgeführt - allerdings jede direkt 8 mehrmals n(8 mal). Der PHP Code an der entsprechenden Stelle sieht wie folgt aus:
PHP:
$query = "UPDATE `%s` SET `order` = -1 WHERE `id` = %d;";
$result = $this->varDatabaseClass->dbQuery($query, self::CONST_GALLERY_TABLE, $idList[1]);
if(!$result)
trigger_error('Gallery::doMoveUp - Moving Action I failed: '.mysql_error(), E_USER_WARNING);
//echo mysql_info()."<br />";
$query = "UPDATE `%s` SET `order` = %d, `last_edit` = %d WHERE `id` = %d;";
$result = $this->varDatabaseClass->dbQuery($query, self::CONST_GALLERY_TABLE, $orderList[1], time(), $idList[0]);
if(!$result)
trigger_error('Gallery::doMoveUp - Moving Action II failed: '.mysql_error(), E_USER_WARNING);
//echo mysql_info()."<br />";
$query = "UPDATE `%s` SET `order` = %d, `last_edit` = %d WHERE `id` = %d;";
$result = $this->varDatabaseClass->dbQuery($query, self::CONST_GALLERY_TABLE, $orderList[0], time(), $idList[1]);
if(!$result)
trigger_error('Gallery::doMoveUp - Moving Action III failed: '.mysql_error(), E_USER_WARNING);
$this->varDatabaseClass->dbQuery ist ein dbQuery nach dem Schema des Snippets aus dem Snippet-Thread, $orderList und $idList enthalten jeweils zwei Werte, wie sie auch in den obigen Querys eingesetzt sind. Die Konstante stimmt auch.
So, und was mich jetzt letztlich am meisten fasziniert: Wenn ich alle drei Updates laufen lasse, dann ändert er das Order-Feld nicht. Das last_edit-Feld wird aber in jedem Fall erneuert.
Lasse ich den dritte Query weg, habe ich in einem Feld eine -1 stehen, und im zweiten die neue Order-Nummer.
So.. jetzt die simple Frage: Was mache ich falsch? Ich sitz da jetzt seit zwei Stunden vor, aber ich kriege es nicht hin, dass der alle drei ausführt, bis auf in PHPMyAdmin.. bin total am verzweifeln mittlerweile..
Zuletzt bearbeitet: