使用php更新数据库

时间:2015-07-22 12:53:02

标签: php mysql sql

我正在将添加的工作时间插入到我的数据库中,但问题是如果我为同一个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;

4 个答案:

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