使用html表单导入csv数据..使用PHP脚本加载数据infile和MySQL


Using html form to import csv data... using PHP script load data infile and MySQL

我在MAMP本地服务器上运行此脚本时遇到问题:

<?php
//Uploader Script for mass upload of devices.
//Check for errors
if($_FILES['file_upload']['error'] > 0){
    die('An error ocurred when uploading.');
}
//check file type is csv
if($_FILES['file_upload']['type'] != 'text/csv'){
    die('Unsupported filetype uploaded.');
}
//check size of csv
if($_FILES['file_upload']['size'] > 500000){
    die('File uploaded exceeds 500kb - maximum upload size.');
}
$file_url = $_FILES['file_upload']['tmp_name'];
$query = <<<eof
    LOAD DATA LOCAL INFILE '$file_url'
     REPLACE
     INTO TABLE DEVICE
     FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
     LINES TERMINATED BY ''n'
    (device_id, device_name, app_name)
eof;
$load_data = mysql_query($query);

数据被放入一个没有外键依赖关系的表中。我正在尝试上传一个CSV,并且已经成功地将数据库与其他代码一起使用。我正在使用以下电子邮件表单:

<form action='upload.php' enctype='multipart/form-data'  method='post'>";
     File: <input type='file' name='file_upload'>"; 
     <input type='submit' name='Submit' value='Download Devices' />
 </form>

我认为您需要将enctype="multipart/form-data"添加到表单标记中。

请参阅enctype=';多部分/表单数据';意思是

好吧,现在我们知道了,你需要检查运行MySQL进程的用户是否有权访问位于$_FILES['file_upload']['tmp_name']的临时文件。这是最有可能失败的地方。

您可能可以使用mysql_error或mysql_errno函数找到它:http://php.net/mysql_error

$load_data = mysql_query($query)  or die("<b>A fatal MySQL error occured</b>.'n<br />Query: " . $query . "<br />'nError: (" . mysql_errno() . ") " . mysql_error()); 

这将让您知道mysql是否失败并输出原因。