我有一个写入 MySQL 数据库的表单。
例如:
员工编号:
姓名:
年龄:
高度:
重量:
第一个字段,员工编号是一个用户的唯一 ID。
我希望这样的情况是,如果有人用不同的唯一员工编号填写表格,它会创建一个新记录,但是如果填写的是相同的数字,那么它只会写入旧记录 - 这样他们就可以回来稍后调整提交。
我当前用于编写表单的数据库表单的代码如下所示:
try {
$pdo = new PDO('mysql:host=localhost; dbname=db1', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('INSERT INTO table
(
Time,
Unique_ID,
q1,
q2,
q3
)
VALUES
(
now(),
:Unique_ID,
:q1,
:q2,
:q3
)');
$stmt->execute(array(
':Unique_ID => $UID,
':q1' => $q1,
':q2' => $q2,
':q3' => $q3
));
# Affected Rows?
echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
非常感谢任何和所有帮助,谢谢。
编辑:根据@Adrian Cornish 在下面的建议,我将查询调整为 REPLACE 语句:
现在是这样写的:
try {
$pdo = new PDO('mysql:host=localhost; dbname=db1', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('REPLACE INTO table
(
Time,
Unique_ID,
q1,
q2,
q3
)
VALUES
(
now(),
:Unique_ID,
:q1,
:q2,
:q3
)');
$stmt->execute(array(
':Unique_ID => $UID,
':q1' => $q1,
':q2' => $q2,
':q3' => $q3
));
# Affected Rows?
echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage();
}
此外,我在 MySQL 数据库中编辑了表结构,使得“Unique_ID”字段现在具有“非空”和“唯一索引”属性,如以下文档所示: http: //dev.mysql.com/doc/refman /5.6/en/replace.html
状态:REPLACE 的工作方式与 INSERT 完全相同,只是如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,则在插入新行之前删除旧行。
但是,在尝试为相同的 Unique_ID 输入数据两次时,我收到了错误:
Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '90210' for key 'Unique_ID_UNIQUE'
我错过了什么?谢谢