csv到PHP的MySQL

您好,我试图导入数据从.csv文件到MySQL表。 以下是我正在使用的脚本。 运行后,只有print_r($ _ FILES)被执行,并没有插入到数据库中。

<?php session_start(); ?> <?php require('includes/dbconnect.php'); ?> <?php require 'includes/header.inc.php'; ?> <?php if(isset($_POST['SUBMIT'])) { $fname = $_FILES['csv_file']['name']; //Acquire the name of the file $chk_ext = explode(".",$fname); $filename = $_FILES['csv_file']['tmp_name']; $handle = fopen($filename, "r"); //Open the file for readability while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $sql = "INSERT into biodata (student_number, fname, lname, level) values('$data[0]','$data[1]','$data[2]')"; mysql_query($sql) or die(mysql_error()); } fclose($handle); echo "Successfully Imported"; } else { echo "Invalid File"; } print_r($_FILES) ; ?> 

您的查询有问题。
它预期4列(如列列表中所指定),但你只覆盖3列。

 $sql = "INSERT into biodata (student_number, fname, lname, level) values('$data[0]','$data[1]','$data[2]')"; 

首先检查文件是否成功打开:

 $handle = fopen($filename, "r"); if( !$handle){ die( 'Cannot open file fore reading'); } 

这实际上只是你没有正确处理的地方(希望你打开了错误报告,因为这可能只是fgetcsv()问题,错误报告将是至关重要的)。

一旦你已经制定了如何访问上传的文件,你也可以看看使用LOAD DATA INFILE。 如果使用LOCAL关键字(LOAD DATA LOCAL INFILE),即使在共享主机上也应该可以工作。 有关示例,请参阅: http : //dev.mysql.com/doc/refman/5.0/en/load-data.html

这样做的好处在于,比大量的INSERT更快,这对大型CSV文件尤其重要。 另外,它很容易使用。