【问题标题】:PHP MySQL LOAD DATA INFILE HelpPHP MySQL LOAD DATA INFILE 帮助
【发布时间】:2011-09-01 03:52:08
【问题描述】:

我似乎无法正确查询此查询。基本上,我从表单中获取 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 ' 附近使用正确的语法

【问题讨论】:

  • 还有什么问题?错误信息?

标签: php mysql


【解决方案1】:

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

LINES TERMINATED BY '\\n'

Mysql 只会得到\n,但 PHP 会尝试解释这些,所以你必须转义它们。

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

【讨论】:

  • 删除表名周围的引号,进行更新,然后再试一次,让我们知道。
  • 感谢 Fosco,现在错误是... 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'REPLACE INTO TABLE 'jos_rates_table' FIELDS TERMINATED BY ',' ENCLOSED BY ' ' ES' 附近使用正确的语法
  • 以\结尾的行的转义只是\所以不会转义为\\?从字面上看,有效的 phpmyadmin 查询是... LOAD DATA LOCAL INFILE '/home/simpleld/tmp/phpoGAzn0' REPLACE INTO TABLE jos_rates_table FIELDS TERMINATED BY ',' ESCAPED BY '\\' LINES TERMINATED BY '\n '
  • @Greg 好的,我更新了……那么 ('country','rate') 在上面的查询中做了什么?
  • 这已被删除,对不起,好的,我们开始吧,所以我更新了所有内容,我只需要这个查询和错误消息... $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
【解决方案2】:

不知道你为什么要使用那个长长的 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/

【讨论】:

  • 长url是因为它是joomla组件,enctype在那里,就在窗口之外,你需要向右滚动。
猜你喜欢
  • 2010-11-17
  • 2013-01-24
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 2012-06-01
  • 1970-01-01
相关资源
最近更新 更多