2016-09-01 12 views
1

Ok, wenn der Benutzer einen Kommentar mag, fügt mein Skript den Benutzernamen in die Kommentartabelle ein, likes row.Mysql add Wert (concat) am Anfang, nicht am Ende?

$ben = "Rose,"; 

mysql_query("UPDATE comments set likes = CONCAT(comments.likes, 
'".$ben."') WHERE id ='".$id."'") or die(mysql_error()); 

Allerdings fügt es am Ende der Liste hinzu. Zum Beispiel, wenn likes Zeile diese haben;

John, Mark, Mary,

nachdem er fügt hinzu, seine

John, Mark, Mary, Rose,

Aber ich will es an den Anfang schreiben,

Rose, John, Mark, Mary,

Wie kann ich das tun?

+6

Ist die Reihenfolge der Argumente 'CONCAT nicht einfaches Umschalten()' tun, was Sie wollen? – Chris

+0

Wenn Sie concat verwenden, wird der neue Wert am Ende des aktuellen Werts hinzugefügt. – user3304007

+5

Sie sollten Ihre Datenbank normalisieren und eine separate Tabelle haben, um Benutzer mit Kommentaren und Benutzern zu verbinden. Dies macht es sehr schwierig und äußerst ineffizient, Informationen abzurufen. – jeroen

Antwort

7

Argumente ändern function_concat bestellen

mysql_query("UPDATE comments set likes = CONCAT( 
'".$ben."',comments.likes) WHERE id ='".$id."'") or die(mysql_error()); 

Mit PDO:

use \PDO as PDO; 
$PDO = new PDO('mysql:...'); 
$Stm = $PDO->prepare("UPDATE comments set likes = CONCAT(?,comments.likes) WHERE id =?"); 
$Stm->execute([$ben,$id]); 
+4

Dies beantwortet die Frage, aber Sie sollten wirklich ein Beispiel ohne die veraltete mysql_ * 'und ohne das Risiko von SQL-Injektionen zeigen. Dann würden Sie eine weitere upvote bekommen. Wir sollten alle helfen, Best Practices zu fördern. –

+0

@MagnusEriksson Thx, PDO-Code hinzugefügt, ich stimme zu, dass es ein besseres Wort wäre, wenn jeder "mysql_ *' – cske

+0

vergessen hätte. Schön. Es entfernt nicht nur das Risiko von Injektionen, es macht es auch lesbarer –

Verwandte Themen