如何更新一个表中的多行(mysql、php、pdo)

f2uvfpb9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(357)


问题是,当我把文本区域留空时,我希望它删除那个条目

我有一个要更新主键(regno)和(name)的表

Table students
(Primary Key)                                            (Foreign Key)
 RegNo               Name              Passwd             ProjectID
 f12345              Ali                345                   1
 f12346             Chris               346                   1
 f12347             Ameer               347                   1

我尝试了很多方法,

$names = [
       ['reg'=> $_POST['s1_id'], 'name'=> $_POST['s1_name']],
       ['reg'=> $_POST['s2_id'], 'name'=> $_POST['s2_name']], 
       ['reg'=> $_POST['s3_id'], 'name'=> $_POST['s3_name']]
       ]; 

 $query="update students SET Name=:Name WHERE RegNo=:reg And 
 ProjectID='$id'";

 foreach ( $names as $name)
 {
   try
  {

    $stmt = $conn->prepare( $query );  
    $stmt->bindParam(':Name', $name['name']);
    $stmt->bindParam(':reg', $name['reg']);

    $result = $stmt->execute();
    $msg = "Record updated";

    //header("location:adminhome.php");
  }

  catch(PDOException $ex)
   {
      $msg = $ex -> getMessage();
   }
  }

通过这种方式,我只能更新name列。如何更新regno和name。我是新的后端编程。我不知道如何做到这一点。

kmbjn2e3

kmbjn2e31#

像这样的?我只是补充了一句 , RegNo=:reg 这个在里面 SET 因为reg已经绑定了,我想这就是你需要添加的全部内容。
我更新了我的答案,因为它永远不会匹配当你发送一个更新的regno与你的数据结构。所以你应该发送两个regno,一个旧的,一个新的。
对于删除,我定义了两个查询,一个用于删除,一个用于更新。在我们更新结果之前,我先检查一下 foreach 如果新生( $name['reg_set'] )是空的,如果是我们运行 $query_delete 否则我们就跑 $query_update ```
$names = [
['reg'=> $_POST['s1_id'], 'reg_set'=> $_POST['s1_id_set'], 'name'=> $_POST['s1_name']],
['reg'=> $_POST['s2_id'], 'reg_set'=> $_POST['s2_id_set'], 'name'=> $_POST['s2_name']],
['reg'=> $_POST['s3_id'], 'reg_set'=> $_POST['s3_id_set'], 'name'=> $_POST['s3_name']]
];

$query_delete="DELETE FROM students WHERE RegNo=:reg And ProjectID='$id'";

 $query_update="UPDATE students SET Name=:Name, RegNo=:reg_set WHERE RegNo=:reg And
 ProjectID='$id'";

foreach ( $names as $name)
{
try
{

        if(empty($name['reg_set'])){
            $stmt = $conn->prepare( $query_delete );
            $stmt->bindParam(':Name', $name['name']);
            $stmt->bindParam(':reg', $name['reg']);

            $result = $stmt->execute();
            $msg = "Record deleted";
        }else{
            $stmt = $conn->prepare( $query_update );
            $stmt->bindParam(':Name', $name['name']);
            $stmt->bindParam(':reg', $name['reg']);
            $stmt->bindParam(':reg_set', $name['reg_set']);

            $result = $stmt->execute();
            $msg = "Record updated";
        }

//header("location:adminhome.php");

}

catch(PDOException $ex)
{
$msg = $ex -> getMessage();
}
}

相关问题