Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何更新一个表中的多行(mysql、php、pdo)_Php_Mysql_Pdo - Fatal编程技术网

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

如何更新一个表中的多行(mysql、php、pdo),php,mysql,pdo,Php,Mysql,Pdo,问题是,当我将文本区域留空时,我希望它删除该条目 我有一个表,我想在其中更新主键(RegNo)和(Name) 我尝试了几种方法 $names = [ ['reg'=> $_POST['s1_id'], 'name'=> $_POST['s1_name']], ['reg'=> $_POST['s2_id'], 'name'=> $_POST['s2_name']], ['reg'=> $_POST['s3_id'], '

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

我有一个表,我想在其中更新主键(RegNo)和(Name)

我尝试了几种方法

$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();
   }
  } 

通过这种方式,我只能更新名称列。如何更新RegNo和Name。我不熟悉后端编程。我不知道如何做到这一点

像这样的?我只在
集合中添加了
,RegNo=:reg
这个,因为reg已经绑定了,我想这就是您需要添加的全部内容

我更新了我的答案,因为当您发送一个更新的RegNo和您的数据结构时,它将永远不会匹配。所以你应该发送两个RegNo,一个旧的,一个新的

对于删除,我定义了两个查询,一个用于删除,一个用于更新。在我们更新结果之前,我在
foreach
中检查新学生ID(
$name['reg\u set']
)是否为空,如果为空,我们将运行
$query\u delete
,否则我们将运行
$query\u 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();
   }
  }

如果我看不出它是完全错误的,那么您将一次又一次地覆盖同一个数据集(所有数据集都带有prejection=$id)。还是有一个我们看不到的外部循环?您只是
SET
ting
Name=:Name
@Jeff此代码工作正常,但它是唯一更新的名称。我想同时更新RegNo和Name@Mehdi是的,我的问题是我们如何设置两者?从哪里我可以得到“$\u POST['s1\u id\u set']”这个值?@J Quest你在吗?是的,我在,嗯,你必须随表格一起发送。你从哪里收到s1_id?@J任务从我发送的表单中
$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();
   }
  }