下面的代码正确地更新了MySQL表,所以当有人在团队中输入一个数字和一个cp2_arrival
的时间时,它就会进入表格。但是当我对下一个时间条目执行相同操作时,它会创建一个新行,而不是更新该团队的现有行。
这是我的代码
<?php
$con=mysqli_connect("localhost","","","");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to Database, Contact Control: " . mysqli_connect_error();
}
// escape variables for security
$Team = mysqli_real_escape_string($con, $_POST['Team']);
$cp = mysqli_real_escape_string($con, $_POST['cp']);
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
)";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "record added";
mysqli_close($con);
?>
任何帮助将不胜感激。
INSERT 将始终创建一个新行(或错误输出(。根据您的表结构,您可以执行以下操作:
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'";
但是,这将要求 Team 列是唯一索引或主键。如果不是这种情况,则需要对表进行某种检查,以确定是要插入还是更新,然后运行您拥有的插入语句或运行如下所示的更新语句:
$sql="UPDATE checkpoints SET CP2_Arrivale='".$cp."00' WHERE Team='".$Team."';
如果要将"团队"列添加为主键,请尝试:
ALTER TABLE checkpoints ADD PRIMARY KEY(Team);
首先,据我了解,您可以将Team
列定义为主键(或唯一键(。然后您可以使用以下语句:
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival = '".$cp."00';
在这种情况下,如果没有此类Team
,您将插入新行,或者在其他情况下更新CP2_Arrival
。您可以在此处阅读有关此内容的更多信息:重复插入
您也可以使用REPLACE
(替换语法(代替INSERT
(这也需要主/唯一键(:
$sql="REPLACE INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
)";
谢谢大家。我现在让它工作了。首先,我将编码更改为大多数人的建议(见下文(还截断了选项卡,然后将团队作为主键。测试了这个,它现在可以工作了
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'";