【问题标题】:Import data from CSV file to Mysql table through php通过php将数据从CSV文件导入Mysql表
【发布时间】:2016-11-07 08:09:25
【问题描述】:

正如标题中所解释的,我正在尝试通过将 csv 文件上传到我的 php 页面来将数据导入到我的表中。 这是我从EggSlab得到的代码

<?php
					
					$servername = "localhost";
					$username = "root";
					$password = "";
					$dbname = "Test";

					// Create connection
					$conn = new mysqli($servername, $username, $password, $dbname);
					// Check connection
					if ($conn->connect_error) {
						 die("Connection failed: " . $conn->connect_error);
					}
					
					
?>

<html>

	<body>
		
		<form name="import" method="post" enctype="multipart/form-data">
		<input type="file" name="file" /><br />
        <input type="submit" name="submit" value="Submit" />
		</form>
		
		<?php
if(isset($_POST["submit"]))
{
 $file = $_FILES['file']['tmp_name'];
 $handle = fopen($file, "r");
 $c = 0;
 while(($filesop = fgetcsv($handle, 1000, ",")) !== false)
 {
 $name = $filesop[0];
 $email = $filesop[1];
 
 $sql = "INSERT INTO `xl` (`Name`, `Email`) VALUES ('$name','$email')";

 }
 

 if ($conn->query($sql) === TRUE) {
	echo "You database has imported successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error; 
}
}

?>
	</body>

</html>

问题是,提交文件时,只有文件的最后一行被插入到表中。任何修改建议以使代码插入 csv 文件的每一行?

【问题讨论】:

  • 对 while 循环中的每次迭代执行查询。在这里,你只是在最后执行请求,所以一次,它是你的 csv 的最后一行
  • 所以,我不确定,但请尝试在 while 循环中移动 if else 语句
  • 查询在while循环内。
  • 是的,但是查询的执行不是
  • 使用LOAD DATA INFILE会快很多

标签: php html mysql csv


【解决方案1】:

这应该可以解决您的问题。您没有在循环中执行查询。

  		<?php
if(isset($_POST["submit"]))
{
 $file = $_FILES['file']['tmp_name'];
 $handle = fopen($file, "r");
 $c = 0;
 while(($filesop = fgetcsv($handle, 1000, ",")) !== false)
 {
  $name = $filesop[0];
  $email = $filesop[1];
 
  $sql = "INSERT INTO `xl` (`Name`, `Email`) VALUES ('$name','$email')";
  if ($conn->query($sql) === TRUE) {
	 echo "You database has imported successfully";
  } else {
    echo "Error: " . $sql . "<br>" . $conn->error; 
  }
 }
 

 
}

?>

【讨论】:

  • 是的,这非常有效。感谢您的回复。
【解决方案2】:

CSV 文件导入见示例:

   <?php 
           $file = $_FILES['file']['tmp_name'];

           //Read the file
            $content = file_get_contents($file);
            //Split file into lines
            $lines = explode("\n", $content);

            //Find columns by reading first line

             for ($i = 1; $i <= 310; $i++) {
                $data = explode("\t", $lines[$i]);
                $name = $filesop[0];
                $email = $filesop[1];

                 $sql = "INSERT INTO `xl` (`Name`, `Email`) VALUES    ('$name','$email')";

        }
    }

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    相关资源
    最近更新 更多