我有一个写入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'
我遗失的东西?谢谢
答案 0 :(得分:2)
您的员工编号可以SELECT
,如果返回了一行,则会发出后续的UPDATE
,或者INSERT
次查询。这是手动方式。
您可以使用INSERT ... ON DUPLICATE KEY UPDATE获得相同的结果,但这不会那么灵活。