更新数据库,不再在列表中添加相同的用户名

时间:2016-04-20 23:05:01

标签: php mysql

    $update_list = "";
foreach($keys as $k)
{
    if(!isset($_GET[$k]) || empty($_GET[$k]))
    {
        exit("error");
    }

    $update_list .= ($k != "username") ? "{$k}={$_GET[$k]},":"";
}
$update_list = substr($update_list, 0, -1);

$con = new PDO("mysql:host=localhost;port=3306;dbname=highscores", "root", "");
$row_list = implode(",", $keys);
$question_marks = substr(str_repeat("?,", sizeof($keys)), 0, -1);

$query = "INSERT INTO `highscores` ({$row_list}) VALUES ({$question_marks}) ON DUPLICATE KEY UPDATE {$update_list}";

当我注销时,它会在列表中添加另一个具有相同名称的用户名。 我想要的是,当用户退出时,它将更新统计数据,而不是在列表中创建具有更新统计数据的相同用户名。 这里有什么问题。

MVG。

2 个答案:

答案 0 :(得分:0)

SQL查询不应该是INSERT INTO,而是UPDATE尝试编写类似的内容:

$query = "UPDATE `highscores`SET({$question_marks}) WHERE username=usernameToUpdate";

替换' usernameToUpdate'到与' highscore'相关的用户名你想改变。使用' userId'可能更好。而不是用户名,但它可以做任何一种方式,

答案 1 :(得分:0)

我的猜测是你实际上没有在数据库中设置主键。 ON DUPLICATE KEY仅在您定义了唯一键时才会触发。所有主键都是唯一的。

每个表都应该有一个主键。虽然技术上不需要,但如果您希望查询没有糟糕的性能,那么您需要拥有主键。

如果我错了并且您确实设置了主键,请尝试在用户名上设置唯一索引。这应该可以解决你的问题。