2012-03-31 13 views
2

Ich habe eine Abfrage ähnlich wie auszuführen:
Mit Kommas in einem CONCAT php mysql Update

<?php 
//....connect to database 
$old = "a,b,c,d"; 
$new = "e,f,g,h"; 

$insert = "UPDATE TABLE SET FIELD = CONCAT(" . $old . ", " . $new . ") WHERE something = 'something'; 
mysql_query($insert); 
?> 

Also im Grunde mag ich den aktuellen Datenbankeintrag mit den ‚neuen‘ String anhängen, die Kommas enthält. Aber da die CONCAT-Funktionen Kommas verwenden, habe ich Probleme.

Hat jemand irgendwelche Tipps, um dies zu erreichen?

Danke allen!

+2

Was für Probleme? –

Antwort

4

Ändern Sie diese Zeile

$insert = "UPDATE TABLE SET FIELD = CONCAT(" . $old . ", " . $new . ") WHERE something = 'something'"; 

dieser

$insert = "UPDATE TABLE SET FIELD = CONCAT('$old', '$new') WHERE something = 'something'"; 

Edit:

Und wenn Sie ein Komma zwischen den $old und $new Zeichenfolgen Sie sind conc atenating, verwenden CONCAT_WS (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws)

Wie so:

$insert = "UPDATE TABLE SET FIELD = CONCAT_WS(',', '$old', '$new') WHERE something = 'something'"; 
+0

Muss ich nicht das gute 'ol: ". $ Variable." Ding? kann ich einfach tun: CONCAT ('$ variable', $ variable ')? Das ist ziemlich nützlich! –

+0

@Learning Sie verpasst das Zitat * wieder * –

+1

Richtig. Da Sie Ihre '$ insert' -Variable mit doppelten Anführungszeichen initialisieren, wird eine variable Erweiterung für alle Variablen wie $ alt und $ new durchgeführt, und alle einfachen Anführungszeichen werden ebenfalls wörtlich interpretiert. – kjones

0

Sie müssen Anführungszeichen um die Variablen hinzufügen, so dass Sie Strings erhalten, so (ich auch ein doppeltes Anführungszeichen hinzugefügt):

$insert = "UPDATE TABLE SET FIELD = CONCAT('" . $old . "', '" . $new . "') WHERE something = 'something'"; 
2

Strings in SQL-Abfragen hat durch Anführungszeichen werden begrenzt.

$insert = "UPDATE TABLE SET FIELD = CONCAT(FIELD,',','$new') WHERE ..."; 

Es gibt auch keinen Grund, eine PHP-Zeichenfolge zu unterbrechen, indem nur unnötiges Rauschen hinzugefügt wird.

Auch ich rieche einen Fall für die database normalization

3

Verwenden Sie die Funktion mysql CONCAT_WS() -> verketten Mit Separator

UPDATE TABLE_NAME SET FIELD_NAME = CONCAT_WS(",",FIELD_NAME,FIELD_NAME2) WHERE CONDITON