gpt4 book ai didi

PHP 更新现有 MySQL 行或插入新行(对 UPDATE ON DUPLICATE KEY 感到困惑)

转载 作者:行者123 更新时间:2023-11-30 00:00:11 25 4
gpt4 key购买 nike

我正在尝试编写一个非常简单的更新程序,它可以更新/创建 MySQL 表中的许多行,但我肯定在某个地方出错了。 service 表如下所示:

+---------+----+------------+-------------+--------------------+
| auto_id | id | number | enlisted | poe |
+---------+----+------------+-------------+--------------------+
| 27 | 20 | | 18.01.1916 | Newcastle, NSW |
| 28 | 21 | 3088 | 31.07.1915 | Liverpool, NSW |
| 29 | 21 | | 19.05.1919 | |
| 30 | 22 | | 10.1916 | 2 MD |
| 31 | 23 | 1703 | 18.02.1916 | Melbourne |
| 32 | 24 | 7683 | 13.09.1917 | West Maitland, NSW |
+---------+----+------------+-------------+--------------------+

auto_id 是自动递增主键。 id是另一个表中士兵的ID(所有ID都是唯一的)。正如您所看到的,21 号士兵有两条服役记录。我的问题是,在我的(丑陋、笨重的)PHP 代码中,当我尝试编辑一名士兵以添加服务记录时,它只是为旧记录(正在更新)和新记录添加新行。这是 PHP:

for ($i = 0; $i < count($serviceArray); $i++) {
$currentIDQuery = mysql_query("SELECT id from servicemen WHERE linkname='$target'");
$currentID = mysql_fetch_row($currentIDQuery);
$sqlService = "INSERT INTO service ".
"(id,number,enlisted,poe,unit,rank,place,casualties,awards,discharged,final_fate,cemetery,memorial)".
"VALUES('".$currentID[0]."', '".$serviceArray[$i]['number']."', '".$serviceArray[$i]['enlisted']."', '".$serviceArray[$i]['poe']."', '".$serviceArray[$i]['unit']."', '".$serviceArray[$i]['rank']."', '".$serviceArray[$i]['place']."', '".$serviceArray[$i]['casualties']."', '".$serviceArray[$i]['awards']."', '".$serviceArray[$i]['dis']."', '".$serviceArray[$i]['final']."', '".$serviceArray[$i]['cem']."', '".$serviceArray[$i]['mem']."')".
"ON DUPLICATE KEY UPDATE number='".$serviceArray[$i]['number']."', enlisted='".$serviceArray[$i]['enlisted']."', poe='".$serviceArray[$i]['poe']."', unit='".$serviceArray[$i]['unit']."', rank='".$serviceArray[$i]['rank']."', place='".$serviceArray[$i]['place']."', casualties='".$serviceArray[$i]['casualties']."', awards='".$serviceArray[$i]['awards']."', discharged='".$serviceArray[$i]['dis']."', final_fate='".$serviceArray[$i]['final']."', cemetery='".$serviceArray[$i]['cem']."', memorial='".$serviceArray[$i]['mem']."'";
$retservice = mysql_query( $sqlService, $conn );
if (!$retservice){
die('Could not enter service data: ' . mysql_error());
}
}

据我所知,我的问题是代码将给出一个新的 auto_id 无论它做什么。它需要查看的 DUPLICATE KEYid,但其中可以有多个相同的值。

最佳答案

要执行ON DUPLICATE KEY操作,表上需要有一个UNIQUE KEY(除了auto_id > 栏)。 INSERT 操作必须导致“重复键”错误。

UNIQUE KEY 可以位于列的组合上,例如,在示例数据中,(id,enlisted) 看起来是唯一的。 (我只是猜测什么列组合可以唯一标识一行。)

关于PHP 更新现有 MySQL 行或插入新行(对 UPDATE ON DUPLICATE KEY 感到困惑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com