1

我有一个带有自动递增主键 (UID) 的 MySQL 表。用户可以通过 PHP 表单在此表中显示一条记录,其中 UID 是 $_GET 变量。我希望数据库更新所选记录(如果存在),但每次用户点击提交时,都会创建一条新记录。这是我迄今为止尝试过的:

//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);

这行不通。我是否需要表格中的另一个唯一键,还是我遗漏了一些明显的东西?

4

1 回答 1

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

这应该是查询;我VALUES()从您的代码中删除并添加了反引号并更正了您的参数。

我建议您在列名周围使用反引号,这样它就不会与其他类似的 SQL 关键字作为示例混淆。

于 2013-11-14T17:41:55.767 回答