2016-04-24 96 views
1

我有问题更新我的现场数据。例如,我有数据“跑步者”字段,我想更新字段为“跑步者,游泳者”。换句话说,我希望我的字段永远不会删除previuos数据。但现在更新后,我只能从“跑步者”变成“游泳者”。现场更新witchout丢失previuos现场数据


我现在代码:

function updateUserField($username, $field, $value) { 
    $q = "UPDATE " . TBL_USERS . " SET " . $field . " = '$value' WHERE username = '$username'"; 
    return mysql_query($q, $this->connection); 
} 

感谢您的帮助!对不起英文不好。

+0

您需要在MySQL中使用CONCAT()函数进行字符串连接。见答案。 – fierynot

+0

请注意,您很容易[SQL注入](https://en.wikipedia.org/wiki/SQL_injection)。这是一个很大的安全风险。我建议你转移到PDO或mysqli来阻止它。 – Bono

回答

0

您需要使用CONCAT()函数在MySQL字符串连接:

UPDATE TBL_USERS SET $field = CONCAT($field, '$value') WHERE username = $username;

2

你有错误的想法。在关系数据库中存储列表的正确方法是使用联结表。这将每个用户和每个“字段”有一行。在你的情况下,表格至少有三列UserId,Field,Value

于是,“更新”看起来像:

insert into UserFields (UserId, Field, Value) 
    values ($UserId, @Field, $Value); 

(当然,你应该使用mysqli_和参数化查询,但是那是另一回事。)

不要进入当SQL提供了一个非常好的方法来存储列表时,将列表存储为字符串的习惯。