Php 为什么我的数据在MySQL中插入了两次

Php 为什么我的数据在MySQL中插入了两次,php,mysql,Php,Mysql,我正在使用PHP和MySQL数据库做我的学校项目。当我尝试在数据库中导入数据时,会遇到一个问题。在第一个表(murid表)中,它工作得很好,但在第二个表(pendaftaran表)中,它似乎导入了两次。这是我的PHP代码。我想知道为什么我的数据会在pendaftaran表中插入两次 <?php session_start(); $username = $_SESSION['username']; $conn = mysqli_connect('localhost','root','','d

我正在使用PHP和MySQL数据库做我的学校项目。当我尝试在数据库中导入数据时,会遇到一个问题。在第一个表(murid表)中,它工作得很好,但在第二个表(pendaftaran表)中,它似乎导入了两次。这是我的PHP代码。我想知道为什么我的数据会在pendaftaran表中插入两次

<?php
session_start();
$username = $_SESSION['username'];
$conn = mysqli_connect('localhost','root','','darksith');

if(!$conn)
{
    echo 'Not connected';   
}


if (isset($_POST['importbutton'])) {
    $namaFail = $_FILES['file']['tmp_name'];

    if ($_FILES['file']['size'] > 0) {
      $fail = fopen($namaFail, 'r');

      while (!feof($fail)) {
        $data = fgetcsv($fail, '0');

        $query = "SELECT * FROM murid WHERE No_Sekolah_Murid = '".$data[0]."'";
        $result = mysqli_query($conn, $query);

        if (empty($data[0] || $data[1] || $data[2] || $data[3])) {
          echo "<script>
              window.alert('Sila isikan semua medan dalam fail!');
              window.location = '';
              </script>";
          //exit();
        } else {

          if (mysqli_num_rows($result) === 0) {
            $query1 = "INSERT INTO murid(No_Sekolah_Murid, Nama_Murid, Kelas, Tarikh_Daftar) VALUES('".$data[0]."', '".$data[1]."', '".$data[2]."',NOW())";

            $query2 = "INSERT INTO pendaftaran(ID_Pendaftaran, ID_Pengguna, No_Sekolah_Murid, Kod_Pertubuhan) VALUES('', '$username', '".$data[0]."', '".$data[3]."')";

            mysqli_query($conn, $query1);
            var_dump(mysqli_query($conn, $query1));
            mysqli_query($conn, $query2);
            var_dump(mysqli_query($conn, $query2));


          // echo "<script>
              // window.alert('Rekod berjaya ditambahkan!');
              // window.location = 'import.html';
              // </script>";
          } else {
            "<script>
          window.alert('Rekod gagal ditambahkan!');
          window.location = 'import.html';
          </script>";
          }
        }

      } fclose($fail);
    } 

} else {   
    echo "<script>
      window.alert('Import gagal. Sila cuba sekali lagi!');
      window.location = 'import.html';
      </script>";
    exit();
}

?>

查询执行了两次

它正在这一行执行:

   mysqli_query($conn, $query2);
然后在这一行再次执行:

   var_dump(mysqli_query($conn, $query2));
调用
mysqli\u query
函数将再次执行该函数。该行显示“执行mysqli_查询函数”,然后输出该函数的返回值

就我们观察到的行为而言,这两行基本上等同于书写:

   $foo2 = mysqli_query($conn, $query2));
   $foo2 = mysqli_query($conn, $query2));
   var_dump($foo2);

问题代码中使用的模式似乎容易受到SQL注入的攻击。将准备好的语句与绑定占位符一起使用

小桌子

OWASP项目

有这么多成功的SQL注入攻击发生,这有点丢脸,因为在代码中避免SQL注入漏洞非常简单


查询正在执行两次

它正在这一行执行:

   mysqli_query($conn, $query2);
然后在这一行再次执行:

   var_dump(mysqli_query($conn, $query2));
调用
mysqli\u query
函数将再次执行该函数。该行显示“执行mysqli_查询函数”,然后输出该函数的返回值

就我们观察到的行为而言,这两行基本上等同于书写:

   $foo2 = mysqli_query($conn, $query2));
   $foo2 = mysqli_query($conn, $query2));
   var_dump($foo2);

问题代码中使用的模式似乎容易受到SQL注入的攻击。将准备好的语句与绑定占位符一起使用

小桌子

OWASP项目

有这么多成功的SQL注入攻击发生,这有点丢脸,因为在代码中避免SQL注入漏洞非常简单


更改下面提到的代码:

mysqli_query($conn, $query2);
var_dump(mysqli_query($conn, $query2));


更改下面提到的代码:

mysqli_query($conn, $query2);
var_dump(mysqli_query($conn, $query2));


移除并移动var_转储。请参阅关于准备statements@Mr.Blue非常感谢你。我没有意识到var_垃圾场。顺便问一下,为什么var_dump会让它输入重复项?我认为var_dump只显示变量类型和values@ChuahHaoMin您在var_dumps()内部再次执行mysqli_query(),这就是为什么会有重复的插入。请删除并移动var_dumps。请参阅关于准备statements@Mr.Blue非常感谢你。我没有意识到var_垃圾场。顺便问一下,为什么var_dump会让它输入重复项?我认为var_dump只显示变量类型和values@ChuahHaoMin您在var_dumps()中再次执行mysqli_query(),这就是为什么会有重复的插入。