2013-11-14 69 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