Php 如何基于单个字段覆盖表中的单个MySQL记录';s值与现有记录匹配';s
我有一个表单可以写入MySQL数据库 例如: 员工编号: 姓名: 年龄: 高度: 重量: 第一个字段employee number是一个用户的唯一ID 我希望这样,如果有人用不同的唯一员工编号填写表单,它会创建一个新记录,但是如果填写的是相同的编号,那么它只会写入旧记录,这样他们可以稍后回来调整提交内容 我当前用于编写数据库表单的代码表单如下所示:Php 如何基于单个字段覆盖表中的单个MySQL记录';s值与现有记录匹配';s,php,mysql,database,forms,pdo,Php,Mysql,Database,Forms,Pdo,我有一个表单可以写入MySQL数据库 例如: 员工编号: 姓名: 年龄: 高度: 重量: 第一个字段employee number是一个用户的唯一ID 我希望这样,如果有人用不同的唯一员工编号填写表单,它会创建一个新记录,但是如果填写的是相同的编号,那么它只会写入旧记录,这样他们可以稍后回来调整提交内容 我当前用于编写数据库表单的代码表单如下所示: try { $pdo = new PDO('mysql:host=localhost; dbname=db1', $username, $pas
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的建议,我已将查询调整为替换语句:
现在改为:
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”字段现在具有“Not Null”和“Unique Index”属性,如下所示:
声明:
REPLACE的工作原理与INSERT完全相同,只是如果表中的一个旧行与主键或唯一索引的新行具有相同的值,则在插入新行之前会删除旧行
但是,在尝试为相同的唯一\u ID输入两次数据时,我得到了错误:
Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '90210' for key 'Unique_ID_UNIQUE'
我错过了什么?谢谢如果返回一行,您可以
选择员工编号上的
,然后发出后续的更新
,或者发出插入
查询。这是手动方式
您可以使用获得相同的结果,但这没有那么灵活。您看过
REPLACE
了吗谢谢,这看起来不错,我现在读一下,并尝试实现这一点。请记住REPLACE
将删除一行,然后插入一行,这意味着数据库行中任何不在表单中的字段都将消失。@AdrianCornish-我已经按照上面的编辑指示更新了代码,并调整了数据库以包含唯一索引,但我收到了我声明的错误-有什么想法吗?谢谢