我正在将添加的工作时间插入到我的数据库中,但问题是如果我为同一个id(afnumber)多次插入,则会保留旧值和新值。新的val不会取代旧的。我正在尝试更新它(评论部分)但是根本没有成功。总是一样的结果。我正在尝试使用if / else条件使其工作,以检查列中的值是否为空,然后插入。如果没有更新,if条件语句中的任何帮助?
我获得更新输出的方式:
if(isset($_POST['submit'])){
if(AddedWH IS NULL) THEN
$addedhours = $_POST['AddedHours'];
$selectaf = $_POST['SelectAF'];
$sql1="INSERT INTO `editedworkhours` (`AFNumber`,`AddedWH`) VALUES('$selectaf','$addedhours')";
$getResult =mysql_query($sql1);
if(mysql_affected_rows() > 0)
{
}
else{
}
else
$tempname = $row['Field'];
$sql2 = "UPDATE editedworkhours SET AddedWH ='".$_GET["addedhours"]."' WHERE AFNumber='".$_GET["selectaf"]."'";
$result2 = mysqli_query($con,$sql2);
if ($con->query($sql2) === TRUE) {
} else {
echo "Error: " . $sql2 . "<br>" . $con->error;
echo '<script>swal("Error", "Something went wrong '.$con->error.'", "error");</script>';
}
echo '<script>swal("Success", "Changes have been saved", "success");</script>';
} END IF;
echo $menu;
答案 0 :(得分:5)
这样做的一种优雅方法是将afnumber
定义为表的主键:
ALTER TABLE `editedworkhours`
ADD CONSTRAINT `editedworkhours_pk` PRIMARY KEY (`afnumber`);
编辑:
正如Gordon在评论中指出的那样,如果您已经拥有主键,则可以添加一个唯一约束:
ALTER TABLE `editedworkhours`
ADD CONSTRAINT `editedworkhours_uc` UNIQUE (`afnumber`);
一旦你有了约束,就可以使用MySQL的insert on duplicate key update
子句:
INSERT INTO `editedworkhours`
(`afnumber`, `addedwh`)
VALUES ($selectaf, $addedwh)
ON DUPLICATE KEY UPDATE `addedwh` = VALUES(`addedwh`)
答案 1 :(得分:2)
好吧,我要做的是制作两个运行的语句--1 INSERT和1 UPDATE。但是,INSERT会检查相同的afnumber
是否已EXIST
。这是一个示例脚本:
if(isset($_POST['submit'])) {
$addedhours = $_POST['AddedHours'];
$selectaf = $_POST['SelectAF'];
$sql1="INSERT INTO `editedworkhours` (`AFNumber`,`AddedWH`)
select '$selectaf','$addedhours'
where not exists (select afnumber from editedworkhours where afnumber = '$selectaf')";
$getResult =mysql_query($sql1);
if(mysql_affected_rows($getResult) == 0) {
$sql2 = "UPDATE editedworkhours SET AddedWH ='".$_POST["addedhours"]."' WHERE AFNumber='".$_POST["selectaf"]."'";
$result2 = mysql_query($sql2);
}
}
以上做了两件事:
a)如果记录不存在,则插入 b)如果插入结果为0记录
,则更新我还注意到,在您的“更新”部分中,您有$_GET
个超全局,而插入内容有$_POST
,因此我将它们都更改为$_POST
。不确定这是不是在烦扰......
答案 2 :(得分:1)
如果你正在谈论这个片段:$sql3 = "UPDATE editedworkhours SET AddedWH+='".$_GET["addedhours"]."' WHERE AFNumber='".$_GET["selectaf"]."'";
,你的问题是关于专栏AddedWH
,对吧?这是什么数据类型,我想某种VARCHAR
?
您应该将列的类型更改为例如INTEGER
并使用... SET AddedWH = AddedWH + ".$_GET["addedhours"]." ...
。
您现在正在做的是添加一个字符串($_GET
变量包含在刻度:'
中),因此SQL语句被解释为字符串连接。
当然,这对所有类型的SQL注入都是开放的,但这不是你问题的一部分(考虑使用准备好的语句,你会在这里和互联网上的其他地方找到关于这个主题的大量信息(即谷歌),参见例如How can I prevent SQL injection in PHP?)。
答案 3 :(得分:0)
NOT 混合mysql_*
和mysqli_*
!不要再使用mysql_*
。
始终测试错误。可能是INSERT
得到了#34;重复的密钥&#34;而你没有注意到?
考虑使用
INSERT ... ON DUPLICATE KEY UPDATE ...