【问题标题】:How to update specific column using fgetcsv如何使用 fgetcsv 更新特定列
【发布时间】:2016-08-30 00:36:02
【问题描述】:

我正在尝试通过fgetcsv 更新特定列。但问题是所有数据都是一样的。有人可以帮我解决这个问题吗?我不知道如何在这里使用grade_id,因为只有数据库中的csv 中没有grade_id。我只通过文件上传来做到这一点。

这是 csv。我只想更新期中成绩。但只插入值64

结果如下。输出应该是75,80,64 而不是64,64,64

这是我的数据库结构

这是我的代码

  if(isset($_POST["Import"])){

        $term = $_POST['term'];
        $fac_code = $_POST['fac_code'];
        $sch_year = $_POST['schoolyear'];
        $section = $_POST['sec'];
        $semester = $_POST['semester'];
        $sub = $_POST['sub'];

        echo $filename=$_FILES["file"]["tmp_name"];

            $heading = true;
         if($_FILES["file"]["size"] > 0)
         {

            $file = fopen($filename, "r");
             while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
             {
                 if($heading) {
                    // unset the heading flag
                    $heading = false;
                    // skip the loop
                    continue;
                }
               //to get the last column
                $last = end($emapData);

                     $sql1 ="SELECT * FROM grade WHERE subj_descr ='$sub' AND section = '$section'";
                         $result = mysqli_query($con, $sql1);

                         while($row = mysqli_fetch_array($result)){
                         $gradeid = $row['grade_id'];

                         $sql = "UPDATE grade SET midterm_grade = '$last' WHERE grade_id = '$grade_id'";
                                   $result = mysqli_query( $con, $sql );
                     }



             }
             fclose($file);
             //throws a message if data successfully imported to mysql database from excel file
             echo "<script type=\"text/javascript\">
                        alert(\"CSV File has been successfully Imported.\");
                        window.location = \"homefaculty.php\"
                    </script>";



             //close of connection
            mysqli_close($con); 



         }

    }   

【问题讨论】:

    标签: php csv fgetcsv


    【解决方案1】:

    您在 mysql 中的更新循环是在您获取最后一个值之后完成的 在您的代码中意味着您执行 3 个循环来更新所有值

    $sql1 ="SELECT * FROM grade WHERE subj_descr ='$sub' AND section = '$section'";

    这个总是获取相同结果的循环被调用了 3 次。

    "UPDATE grade SET midterm_grade = '$last' WHERE grade_id = '$grade_id'";

    在此查询中,grade_id 来自所有结果集

    基本上你正在这样做 1- 获取 CSV 行的最后一个值 2-选择所有记录 3- 将它们全部更新为 1- 4- 下一行

    您应该能够只选择您需要的记录,而不是循环在所有 mysql 数据库中进行 SELECT。我不知道您的 CSV 是否已满,但您的列中有grade_id 吗?否则如何将 CSV 中的一行与数据库中的记录相匹配?

    编辑

    在讨论后你说你有一个关于部分、术语和主题的唯一键 (您必须确定 CSV 中的一行与数据库中的一行之间的关系)

    $last = end($emapData); //to get the last column
    $section = $emapData[0]; // assuming section is the first column of CSV
    $term = $emapData[1]; // assuming term is the 2nd column of CSV
    $subject = $emapData[2]; // assuming subject is the 3rd column of CSV
    
    $sql = "UPDATE grade SET midterm_grade = '$last' WHERE section = '$section' AND term = '$term' AND subject = '$subject'";
    $result = mysqli_query( $con, $sql );
    

    【讨论】:

    • 每一行都有一个grade_id先生。我不知道如何使用grade_id。
    • 先生,需要所有记录。每个 .csv 都包含一个学生部分。我不知道如何一口气更新它。
    • 您确认您在 csv 中有一个grade_id 吗?
    • 是的。我将我的数据库结构发布到我的问题中。
    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2013-12-05
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多