Php mysql中的条件插入或更新

Php mysql中的条件插入或更新,php,mysql,Php,Mysql,我有一个输入类型为time的表,我想首先检查是否有一行具有当前日期和员工id,如果是,则更新输入值,如果不是,则插入新行。这是我尝试过的,但它总是插入新行,即使条件存在: <?php $E1=$_POST['E1']; $connect = mysqli_connect("localhost", "root", "ntr-ktb123", "absence"); $sql1="SELECT * FROM retards WHERE Date ='Curdate()' AND Id

我有一个输入类型为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);

 ?>

这称为upsert,可以在mysql中使用语法完成


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

警告:使用
mysqli
时,您应该使用和将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。注意:
mysqli
的面向对象界面明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆。在你对程序性风格投入太多之前,值得换一种。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口是引入
mysqli
API时PHP4时代的产物,不应在新代码中使用。您还可以执行
更新b=value(b)
如果您想将
b
设置为您最初试图设置的任何值。
insert into t (a, b, c) values (?, ?, ?)
on duplicate key update b = ?