2013-11-14 68 views
2

我有一個帶有自動遞增主鍵(UID)的MySQL表。用戶可以通過PHP表單在此表中創建一條記錄,其中UID是$ _GET變量。我希望數據庫更新所選記錄(如果存在),但每次用戶點擊提交時,都會創建一條新記錄。這是我迄今爲止所嘗試的:使用自動遞增字段更新MySQL記錄爲PK

//Present the form 
$form = $con->prepare("SELECT Name, Date, Time FROM forms WHERE UID = :uid"); 
$data = array('uid'=>$_GET['uid']); 
$form->execute($data); 
$row = $form->fetch(PDO::FETCH_ASSOC);  

//Write new record to database. If the UID exists, update the record. 
INSERT INTO forms (Name, Date, Time) VALUES (:name, :date, :time) 

ON DUPLICATE KEY UPDATE Name=VALUES(Name),Date=VALUES(Date),Time=VALUES(Time); 

這是行不通的。我是否需要另一個獨特的鑰匙,或者我錯過了一些明顯的東西?

+1

*認真*考慮將日期和時間存儲爲單個值。 – Strawberry

+2

如果日期和時間數據類型都可用,則有時候需要單獨存儲日期和時間數據類型。這完全取決於情況。 –

+0

@Strawberry:這不能回答我的問題。 – Chris

回答

1
INSERT INTO forms (`Name`, `Date`, `Time`) VALUES (:name, :date, :time) 
ON DUPLICATE KEY UPDATE `Name`=:name, `Date`=:date, `Time`=:time; 

這應該是查詢;我從您的代碼中刪除了VALUES(),並添加了反引號並更正了您的參數。

而且我建議你圍繞列名使用反引號,這樣它就不會與其他類似的SQL關鍵字混淆,例如。

+0

再次,對不起。我不知道今天我的頭在哪裏。我的參數不像我的示例中那樣大寫。這正是我匆忙打字的原因。 – Chris

+0

@Chris你必須把你的時間儘管重要的東西:) – Houssni