【问题标题】:code or csv file not allowing upload代码或 csv 文件不允许上传
【发布时间】:2016-02-10 16:47:03
【问题描述】:

代码或 csv 的问题都会导致导入问题。代码或 csv 有什么问题吗?

当我运行脚本时,我收到一条默认消息:CSV 文件不可读

这适用于 15 个文件中的 5 个,并且看不到明显的问题或解决方案。

http://www.dodgejeffgen.org/gs/issue1.csv

<?php  

ini_set('auto_detect_line_endings',TRUE);
ini_set('post_max_size', '128M');
ini_set('upload_max_filesize', '128M');

function clean($link, $str, $default ='') {
    if (!isset($str)) $str = $default;
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysqli_real_escape_string($link, $str);
}

$host_name  = "some host";
$database   = "some db";
$user_name  = "some user";
$password   = "some pass";

$connect = mysqli_connect($host_name, $user_name, $password, $database);
if (mysqli_connect_errno())
{ echo "Failed to connect to MySQL: " . mysqli_connect_error(); } else {}                       

$lines = $value1 = $value2 = $data = 0;

if ($_FILES["csv"]["size"] > 0) { 

    //get the csv file 
    $file = $_FILES["csv"]["tmp_name"]; 
    $handle = fopen($file,"r"); 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        //print_r($data).'<br />';
        if ($data[0]) {
            $sql = "INSERT INTO `articles` (`name`, `reference`) VALUES ('".clean($connect, $data[0])."','".clean($connect, $data[1])."')";
            //echo $sql.'<br />';
            if (mysqli_query($connect, $sql)) { } else { echo "Error: " . $sql . "<br>" . mysqli_error($connect); }
           $lines++;
       }
    }
    echo "<b>Your file has been imported.</b><br>";
    echo "Found a total of ".$lines." records in this csv file.<br />"; 
} else { echo 'CSV File not readable.<br />';}

?>
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data" name="form1" id="form1"> 
  Choose your file: <br /> 
  <input name="csv" type="file" id="csv" /> 
  <input type="submit" name="Submit" value="Submit" /> 
</form>

【问题讨论】:

  • 你尝试加载数据本地文件
  • 还没有......更喜欢留在插入...... csv文件很麻烦,但不知道在哪里
  • 错误消息 ::MySQL server has gone awayArray ([0] => Dornbusch, Johanna Fritsch [1] => 7/31/1961, Death*, 1950-94 D V1, pg 239 )错误:插入articles (name, reference) 值('Dornbusch, Johanna Fritsch','7/31/1961, Death*, 1950-94 D V1, pg 239')
  • 您设置的超时时间似乎很短,较大的文件失败

标签: php mysqli mysqlimport


【解决方案1】:

我建议使用 LOAD DATA LOCAL INFILE。只需将您的 csv 文件上传到服务器上的某个位置并运行以下 mysql 查询

LOAD DATA LOCAL INFILE '/path/to/csv_file.csv' INTO TABLE articles 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2) set `name`=TRIM(@col1),`reference`=TRIM(@col2)

【讨论】:

    【解决方案2】:

    像 Indra Kumar S 推荐的那样使用 LOAD DATA LOCAL INFILE 可能会更好。您可以将其加载到临时表 (CREATE TEMPORARY TABLE ...) 中,然后使用 mysql 查询将该数据分发到您存储数据的任何永久表中。

    请记住,除了FIELDS TERMINATED BYLINES TERMINATED BY,还有FIELDS ESCAPED BY,以及其他选项。见这里:http://dev.mysql.com/doc/refman/5.7/en/load-data.html

    首先加载到 MySQL 中的一个很酷的事情是,您可以使用 MySQL(有时在 PHP 的帮助下)进行大量数据清理。 MySQL 应该可以很好地修剪边缘,但您可能更喜欢选择 PHP,然后写回 MySQL 进行更复杂的清理,例如删除不间断空格、字符串内的额外空格或非 ASCII 字符。

    当我做这样的事情时,我想我通过 CSV 来确定每一列的数据类型(varcharintdecimaltextdatetime),然后创建了具有匹配数据类型的临时表,并为该表添加了LOAD DATA INFILE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2022-01-23
      • 2010-10-16
      • 2017-06-09
      • 2019-12-09
      • 2012-10-30
      • 1970-01-01
      相关资源
      最近更新 更多