现场更新失败丢失previuos现场数据

时间:2016-04-24 12:10:36

标签: php mysql sql

我在更新字段数据时遇到问题。例如,我有数据字段" runner"我希望将字段更新为" runner,swimmer"。换句话说,我希望我的字段永远不会删除previuos数据。但是现在更新后我来自" runner"去游泳者"仅

我的代码现在:

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

感谢您的帮助!抱歉英语不好。

2 个答案:

答案 0 :(得分:2)

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

然后,"更新"看起来像是:

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

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

当SQL提供一种非常好的存储列表的方法时,不要养成将列表存储为字符串的习惯。

答案 1 :(得分:0)

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

if(isset($_POST['currentPassword'])) { $currentPassword = $_POST['currentPassword']; $newPassword = $_POST['newPassword']; $ConfirmPassword = $_POST['ConfirmPassword']; //$saltcode = IrBuscarSalt($_SESSION['user']['username']); $oldpass = IrBuscarPassword($_SESSION['user']['username']); $hash = password_hash($oldpass, PASSWORD_BCRYPT, ['cost' => 13]); if (password_verify($oldpass, $hash)) { // password valid //echo $oldpass; $change = true; } else { echo "bad"; } }