PHP MySQL LOAD DATA INFILE 帮助

3

我似乎无法正确地编写此查询。基本上,我正在从表单中获取一个csv文件,并尝试将其加载到数据库中。我从phpmyadmin中取了大部分查询。我应该使用临时文件,对吗?以下是查询:

<form name = "price_chart" method="post" action="index.php?option=<?php echo $option ?>&task=complete" enctype="multipart/form-data">
<label>File: </label>
<input type="file" name="white" id="white"/><br />
<input type="hidden" value="TEST" name = "test" />
<input type="submit" name = "upload" value="Upload File" />
</form>

<?php
}
function complete($option){
$pfile = $_FILES['white']['name'];  
$ptmpName = $_FILES['white']['tmp_name'];
$test = $_POST['test'];
$result = mysql_query("LOAD DATA LOCAL INFILE '$ptmpName' REPLACE INTO TABLE 'jos_rates_table' FIELDS TERMINATED BY ',' ENCLOSED BY ' ' ESCAPED BY '\\' LINES TERMINATED BY '\n'('country' , 'rate')")or die ('Error: '.mysql_error ());
        while ($row = mysql_fetch_array($result)) {
        }
        $num_rows = mysql_num_rows($result);
        echo $num_rows;
}

更新:以下是错误信息

您的SQL语法存在错误,请检查与您的MySQL服务器版本相对应的手册,以确定正确使用语法。在第1行附近出现错误,应该使用'jos_rates_table' FIELDS TERMINATED BY ',' ENCLOSED BY ' ' ESCAPED BY '\' LINES。


1
有什么问题吗?错误信息是什么? - netcoder
2个回答

3

你需要对行终止子句中的斜杠进行转义,否则你只是在查询中添加了一个换行符。

LINES TERMINATED BY '\\n'

Mysql 只会得到 \n,但 PHP 试图解释它们,因此你必须将它们转义。

你可能还有其他问题,但你没有告诉我们发生了什么。


去掉表名周围的引号,进行更新操作,然后再试一次,让我们知道结果。 - Fosco
@Greg 好的,我已经更新了...那么上面的查询中 ('country','rate') 是做什么用的? - Fosco
抱歉,那个已经删除了。好的,我们开始吧。我更新了所有内容,现在只剩下这个查询和错误信息了...$result = mysql_query("LOAD DATA LOCAL INFILE '$ptmpName' REPLACE INTO TABLE jos_rates_table FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\' LINES TERMINATED BY '\n' ")or die ('Error: '.mysql_error ());错误:您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册以获取正确的语法使用方法,位于第2行附近。非常感谢,Fosco。 - Greg Thompson
@Greg,第二行不应该有任何内容...你在以反斜杠结束的行末尾有两个反斜杠吗? - Fosco
'\n' 抛出错误:错误:您的SQL语法中有一个错误;请检查与您的MySQL服务器版本相对应的手册,以了解在第1行使用正确的语法。 - Greg Thompson
显示剩余4条评论

-1

不确定为什么要使用那么长的URL作为操作而不是index.php或者''?此外,我认为你需要指定ENCTYPE="multipart/form-data",因为这是一个上传文件的表单。 不确定如何只插入文件,我认为你需要获取文件的内容,然后将其分解并进行插入。

$pfile = $_FILES['white']['name']; 
$ptmpName  = $_FILES['white']['tmp_name']; 
$fileSize = $_FILES['white']['size']; 
$fileType = $_FILES['white']['type']; 
$fp = fopen($ptmpName, 'r'); 
$content = fread($fp, $fileSize); 
$content = str_replace("\r\n", "\r", $content);
$Data_Lines = explode("\r",$content);

for ($n = 0; $n < (count($Data_Lines)-1);$n++){
$line =  addslashes($Data_Lines[$n]); 
$Value = explode(",",$line);
...//The you run insert  statements for $Value[1], $Value[2]...///

}

或者您可以使用fgetcsv - 可以查看这篇文章:http://www.programmingfacts.com/import-csvexcel-data-mysql-database/


长网址是因为它是 Joomla 组件,enctype 在那里,只是超出了窗口,您需要向右滚动。 - Greg Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接