我有一个带有自动递增主键(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);
这不起作用。我是否需要表中另一个独特的键,或者我错过了一些明显的东西?
答案 0 :(得分:1)
INSERT INTO forms (`Name`, `Date`, `Time`) VALUES (:name, :date, :time)
ON DUPLICATE KEY UPDATE `Name`=:name, `Date`=:date, `Time`=:time;
这应该是查询;我从您的代码中删除了VALUES()
并添加了反引号并更正了您的参数。
我建议你在列名周围使用反引号,这样就不会与其他类似的SQL关键字混淆了。