我想将大型CSV文档上传到mysql数据库中,任何人都可以帮助我,该表由10个字段组成,但我想上传到表中只有5个字段而没有标题。我希望在浏览器中使用php完成此操作
$filename = $_FILES['sel_file']['tmp_name'];
<?php
if($_FILES["file"]["type"] != "application/vnd.ms-excel"){
die("This is not a CSV file.");
}
elseif(is_uploaded_file($_FILES['file']['name'])){
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'cbt_software';
$link = mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql server');
mysql_select_db('cbt_software') or die(mysql_error());
//Process the CSV file
$handle = fopen($_FILES['file']['name'], "r");
$data = fgetcsv($handle, 1000, ";");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$att0 = mysql_real_escape_string($data[0]);
$att1 = mysql_real_escape_string($data[1]);
$att2 = mysql_real_escape_string($data[2]);
$att3 = mysql_real_escape_string($data[3]);
$att4 = mysql_real_escape_string($data[4]);
$sql = "INSERT INTO `course_reg` (`coursecode`,`coursename`,`coursedescription`,`coursemaster`,`courselevel`)VALUES ('$att0','$att1','$att2','$att3','$att4')";
mysql_query($sql) or die(mysql_error());
}
mysql_close($link);
echo "CSV file successfully imported.";
}
else{
die("You shouldn't be here");
}
?>
首先,这会将csv中的所有字段导入到数据库中的一个字段中,并且在我篡改代码后,它不会将其识别为CSV文件。
答案 0 :(得分:3)
如果您具有相应的权限,则可以使用LOAD DATA INFILE
命令直接在MySQL中执行此操作,请参阅http://dev.mysql.com/doc/refman/4.1/en/load-data.html或mysqlimport
实用程序,请参阅http://dev.mysql.com/doc/refman/4.1/en/mysqlimport.html
这两种方法都允许您指定数据应该进入哪些列,例如:
LOAD DATA INFILE 'myfile.txt' INTO TABLE 'mytable' (col1, col2, col3, ...)
或
mysqlimport --columns='col1,col2,...' tablename.csv
如果您打算从PHP中执行此操作,您应该能够读取CSV文件的每一行并执行适当的SQL INSERT查询,命名相应的列(尽管这不会像在MySQL中直接执行那样高效)
编辑:我应该补充一点,你还没有提到你到目前为止所尝试的内容或你发现的困难;如果你特别坚持某些事情,而不仅仅是寻找如何去做的建议,请更新问题说出来。