Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何基于单个字段覆盖表中的单个MySQL记录';s值与现有记录匹配';s_Php_Mysql_Database_Forms_Pdo - Fatal编程技术网

Php 如何基于单个字段覆盖表中的单个MySQL记录';s值与现有记录匹配';s

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

我有一个表单可以写入MySQL数据库

例如:

员工编号:

姓名:

年龄:

高度:

重量:

第一个字段employee number是一个用户的唯一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的建议,我已将查询调整为替换语句:

现在改为:

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-我已经按照上面的编辑指示更新了代码,并调整了数据库以包含唯一索引,但我收到了我声明的错误-有什么想法吗?谢谢