2012-04-15 106 views
0

我試圖運行此查詢重複鍵UPDATE:INSERT INTO ... ON工作不正常

protected function store_credentials($config_file_path = 'envato_credentials_config.json') { 
    $credentials_config = $this->get_envato_config($config_file_path); 
    $sql = "INSERT INTO credentials (api_key, username, last_update) VALUES (?, ?, NOW()) ON DUPLICATE KEY UPDATE api_key = values(api_key), username = values(username), last_update = values(last_update)"; 
    if ($stmt = $this->connect->prepare($sql)) { 
     $stmt->bind_param('ss', $credentials_config['API'], $credentials_config['User']); 
     $stmt->execute(); 
     $stmt->close(); 
    } else { 
     return false; 
    } 
} 

但是,什麼情況是,我總是重複的條目時,它的執行,如果它再次執行,而不是更新它再次運行添加另外兩個條目。爲什麼會發生?

回答

6

您要插入的列之一需要是主鍵或具有唯一約束。

+0

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html – 2012-04-15 16:04:12

+0

還有,id一定不能自動遞增主鍵;) – hjpotter92 2012-04-15 16:06:46

+0

哦,因爲它是自動的增量,所以我應該將其設置爲PRIMARY KEY或UNIQUE,但不能自動增量? – Roland 2012-04-15 16:09:55