2017-10-24 1 views
1

Ich versuche, die folgenden blog zu folgen und eine UPDATE, IF, INSERT INTO-Anweisung zu verwenden, um zu sehen, dass meine Daten nicht zweimal überschrieben werden.MySQL UPDATE, IF, INSERT INTO-Anweisung

Bitte beachten Sie, dass es für PHP ist.

Die Aussage, dass ich habe, ist wie folgt

$query = "UPDATE 
      " . $this->table_name2 . " 
     SET 
      batch = :batch, 
      created = :created 
     WHERE 
      id = :id 
     IF row_count() = 0 
     INSERT INTO " . $this->table_name2 . " 
     SET 
      id=:id, 
      batch=:batch, 
      created=:created"; 

Aber mein Rückgabewert kommt immer wieder als falsch, und ich weiß nicht, wo das Problem ist.

Wenn ich die erste Hälfte der Anweisung versuchen, aktualisiert er die Informationen:

$query = "UPDATE 
      " . $this->table_name2 . " 
     SET 
      batch = :batch, 
      created = :created 
     WHERE 
      id = :id 

Und wenn ich die zweite Hälfte der Anweisung versuchen, fügt sie die Informationen:

 INSERT INTO " . $this->table_name2 . " 
     SET 
      id=:id, 
      batch=:batch, 
      created=:created"; 

ich nicht tun finde nach allot von der Suche bis jetzt Hilfe, und ich fühle, dass irgendwie meine IF-Aussage möglicherweise nicht richtig ist, aber ich bekomme nicht einmal Informationen über die IF row_count() = 0 in den Dokumenten.

+0

Wenn nur in gespeicherten Prozeduren verwendet wird, nicht als Teil von SQL-Anweisungen – JochenJung

+0

@ JochenJung O ok, es ist etwas anderes, das ich dann lernen. Welche alternative Aussage würden Sie vorschlagen, die ich verwende, die am schnellsten sein wird, wenn Sie nichts dagegen haben? –

+0

Sie suchen möglicherweise nach der Schlüsselaktualisierungsversion der Einfügeanweisung. –

Antwort

1

Die IF-Anweisung ist nur in gespeicherten Prozeduren verfügbar.

Wenn id ist der Primärschlüssel (oder einmalig) sollte dies für Sie arbeiten:

INSERT INTO " . $this->table_name2 . " 
     SET 
      id = :id, 
      batch = :batch, 
      created = :created 
ON DUPLICATE KEY UPDATE 
      batch = :batch, 
      created = :created 

Dies wird die INSERT-Anweisung nur ausführen, der die ID noch nicht beendet. Wenn es bereits existiert, wird es den UPDATE-Teil ausführen.

+0

Genau das habe ich gesucht, vielen Dank !! –

+0

Hallo JochenJung, Ich habe gerade die Zitate nach dem ersten 'erstellt =: created' bis nach dem zweiten' erstellt =: created' es funktioniert. Grüße –

+0

Du hast recht, sie gehören nicht dorthin. Just fixed es in meiner Antwort – JochenJung

Verwandte Themen