2016-04-20 66 views
0
$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。

+0

你为什么用Java标签标记这个? –

+0

请描述您正在尝试使用的表格。如果主键是自动增量,则永远不会更新,因为重复键会失败。 –

回答

0

SQL查询不应该是INSERT INTO但UPDATE尝试写这样的:

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

取代“usernameToUpdate”来与你想改变“高分”的用户名。这可能更好使用'userId'而不是用户名,但它可以做到这一点,

0

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

每个表都应该有一个主键。虽然它在技术上不是必需的,但如果你希望你的查询没有可怕的性能,那么你需要有一个主键。

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

+0

关键在于数字,而不是用户名,想那就是它。? –

+0

在用户名上添加一个唯一的索引(键)(不必是主键,只是唯一的),我几乎可以肯定它会解决这个问题。 – starshine531

相关问题