下面的代码是正确更新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);
?>
任何帮助都将不胜感激。
答案 0 :(得分:3)
INSERT将始终创建一个新行(或错误输出)。根据您的表格结构,您可以执行以下操作:
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'";
但是,这需要Team列是唯一索引或主键。如果不是这种情况,您需要对表进行某种检查以确定是否要插入或更新,然后运行您拥有的insert语句或运行更新语句,如下所示:
$sql="UPDATE checkpoints SET CP2_Arrivale='".$cp."00' WHERE Team='".$Team."';
如果您想将Team列添加为主键,请尝试:
ALTER TABLE checkpoints ADD PRIMARY KEY(Team);
答案 1 :(得分:0)
首先,据我所知,您可以将Team
列定义为主键(或唯一键)。
然后您可以使用以下语句:
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival = '".$cp."00';
在这种情况下,如果在其他情况下没有此类Team
或更新CP2_Arrival
,则会插入新行。
您可以在此处详细了解:insert-on-duplicate
此外,您可以使用REPLACE
(REPLACE Syntax)代替INSERT
(这也需要主/唯一密钥):
$sql="REPLACE INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
)";
答案 2 :(得分:0)
谢谢大家。我现在已经开始工作了。首先,我将编码更改为大多数人建议的内容(见下文)。还截断了tabke,然后将Team作为主键。测试了这个,它现在正在工作
$sql="INSERT INTO checkpoints (Team, CP2_Arrival)
VALUES (
'".$Team."',
'".$cp."00'
) ON DUPLICATE KEY UPDATE CP2_Arrival='".$cp."00'";