更新现有行而不是在MySQL中创建新行

时间:2014-12-19 11:49:02

标签: php mysql insert-update

下面的代码是正确更新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);
?>

任何帮助都将不胜感激。

3 个答案:

答案 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

此外,您可以使用REPLACEREPLACE 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'";