在mysql中有条件地插入或更新

时间:2018-06-02 02:49:17

标签: php mysql

我有一个输入类型为time的表,我想首先检查是否有一行包含当前日期和员工ID,如果是,我更新输入的值如果不是我插入一个新行。这就是我尝试过但它总是插入一个新行,即使条件存在:

<?php 

$E1=$_POST['E1'];

$connect = mysqli_connect("localhost", "root", "ntr-ktb123", "absence"); 
$sql1="SELECT * FROM retards WHERE Date ='Curdate()' AND 
IdEmpl='".$_POST["IdEmp"]."' ;";
$result1=mysqli_query($connect,$sql1);
if(!$result1){
       die('ERREUR SQL ! <br>'.$sql.'<br>'.mysqli_error());}
    if($dt=mysqli_fetch_array($result1,MYSQLI_ASSOC)){

$sql="update retards set E1='$E1'  where IdEmpl='".$_POST["IdEmp"]."' AND 
 Date=CURDATE();";
}

else{

$sql="insert into retards(IdEmpl,Date,E1) values 
('".$_POST["IdEmp"]."',CURDATE(),'$E1'); ";
}
$result = mysqli_query($connect, $sql);
if (!$result)
  {
 echo("Error description: " . mysqli_error($connect));
 }
else {
$message ="Effectué avec succès!";

echo "<script type='text/javascript'>alert('$message'); </script>";
}
mysqli_close($connect);

 ?>

1 个答案:

答案 0 :(得分:3)

这称为upsert,可以使用insert ... on duplicate key update语法在mysql中完成。

insert into t (a, b, c) values (?, ?, ?)
on duplicate key update b = ?

您的表应该在感兴趣的列上定义适当的唯一索引或主键。