使用PHP将CSV转换为MySQL

时间:2012-02-03 13:21:02

标签: php mysql csv

我正在尝试使用php将我的students.csv文件中的数据导入mysql。 csv文件中的条目使得列(student_number,fname,lname,level)将插入到biodata表中。

我也是从我的电脑上传student.csv文件。

当我运行页面时,屏幕上没有任何内容。

session_start();
require('includes/dbconnect.php');
require 'includes/header.inc.php';

//check for file upload
if (isset($_FILES['csv_file']) && is_uploaded_file($_FILES['csv_file']['tmp_name'])) {
    //upload directory
    $upload_dir = "C:\Users\DOTMAN\Documents\students.csv";
    //create file name
    $file_path = $upload_dir . $_FILES['csv_file']['name'];
    //move uploaded file to upload dir
    if (!move_uploaded_file($_FILES['csv_file']['tmp_name'], $file_path)) {
        //error moving upload file
        echo "Error moving file upload";
    }
    //open the csv file for reading
    $handle = fopen($file_path, 'r');
    //turn off autocommit and deletethe bio data
    mysql_query("SET AUTOCOMMIT=0");
    mysql_query("BEGIN");
    mysql_query("TRUNCATE TABLE biodata") or die(mysql_error());
    while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
        //Access field data in $data array ex.
        $student_number = $data[0];
        $fname = $data[1];
        $lname = $data[2];
        $level = $data[3];
        //Use data to insert into db
        $query = "INSERT INTO biodata (student_number, fname, lname, level)
                  VALUES ('$student_number', '$fname', '$lname', '$level')";
        mysql_query($query) or die (mysql_error());
    }
}

5 个答案:

答案 0 :(得分:1)

我建议您使用LOAD DATA INFILE命令上传CSV文件。这是一种快速的方法。

答案 1 :(得分:0)

如果您只需要执行此操作,我会考虑使用类似:http://csv2sql.com/

的内容

答案 2 :(得分:0)

我能看到的一个直接问题是:

$upload_dir = "C:\Users\DOTMAN\Documents\students.csv";

//create file name
$file_path = $upload_dir . $_FILES['csv_file']['name'];

您已经将整个路径(包括文件名)分配给$upload_dir变量 - 然后您再次附加上传的文件名。

如果您认为代码中存在错误,请先添加

ini_set('display_errors', 1);
error_reporting(E_ALL);

到PHP代码的开头并修复显示的任何警告/错误。然后,您可以通过在第一次调用中将第二个参数更改为0来关闭打印错误消息。

答案 3 :(得分:0)

你有没有调试$ _FILES:

print_r($_FILES); 

做任何事之前

答案 4 :(得分:0)

使用PHP的解决方案

$file = 'path/to.csv'; 

$lines = file($file);
$firstLine = $lines[0];
foreach ($lines as $line_num => $line) {
    if($line_num==0) { continue; } //escape the header column
    $arr = explode(",",$line);
    $column1= $arr[0];
    $column2= $arr[1];

    echo $column1.$column2."<br />";
        //put the mysql insert statement here
}