2016-04-20 28 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

相關問題