【问题标题】:What is wrong with this csv to mysql upload?这个 csv 到 mysql 上传有什么问题?
【发布时间】:2013-11-21 01:04:29
【问题描述】:

我构建了这个脚本来上传 .csv 文件并将它们直接发送到我的数据库。 但它不会在我的表中写入任何内容。 如果我将文件上传到我的服务器并写“file.csv”而不是“$file”,它就可以完美地工作.. 但我想通过表单上传它们。 谁能帮帮我?

表格:

<html> 
<head> 
</head> 
<body> 

<h2> CSV Import </h2> 
<form>
 <form method="post" action="imp.php" enctype="multipart/form-data"> 
  <input type="file" name="file" /> 
  <br /> 
  <input type="submit" name="submit" value="Submit" /> 
</form>
</body> 
</html>

imp.php:

<?php
$delimiter = ',';

$db = new mysqli('host', 'user', 'pw', 'db');


$file= $_FILES[file][temp_name];


if (($handle = fopen($file, 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        foreach($data as $i => $content) {
            $data[$i] = $db->real_escape_string($content);
        }
        $db->query("INSERT INTO table VALUES('" . implode("','", $data) . "');");
    }
    fclose($handle);
}


?>

【问题讨论】:

  • 你能 var_dump($_FILES) 吗?
  • 让我们看看...未能验证上传是否成功。无法验证数据库连接是否已建立。未能验证查询调用是否成功。使用' 回显包含变量的字符串...我们继续吗?
  • 上传成功! db连接正常!我刚刚做了一个编辑.. echo '$file';不是该计划的一部分
  • 无法引用字符串$_FILES['file']['temp_name']
  • 不会改变任何东西.. :/

标签: php mysql csv file-upload upload


【解决方案1】:

我是$_FILES['file']['tmp_name']

http://www.php.net/manual/en/features.file-upload.post-method.php

不是temp_name

【讨论】:

  • 发生此错误:列数与第 1 行的值计数不匹配但我尝试在没有表单的情况下上传相同的内容,但它有效.. 不明白.. 这怎么可能?
  • 你上传的文件肯定有不同的列数!
  • no.. 我首先将 mysql 导出为 CSV,然后尝试导入它... 它应该是相同数量的 collums 还是? :)
  • 也许您的 CSV 没有完全正确创建?你确定所有的转义正确吗?也可能不是所有的行都有正确的列数? (即没有足够的逗号)
  • phpMyAdmin 将其导出为 CSV.. 你认为我可以信任这个吗?
【解决方案2】:

我强烈建议您使用LOAD DATA INFILE 语法,因为您的服务器上有一个结构良好的 CSV 文件可供使用。

类似:

LOAD DATA LOCAL INFILE '/path/to/local/file'
INTO TABLE table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

这将允许您通过单个查询上传所有内容。另请注意,如果您的 MySQL 服务器和应用程序服务器在同一台机器上,您可以省略 LOCAL 选项,因为 MySQL 可以直接从指定路径的文件系统中读取文件(假设它具有权限)。

这消除了打开文件并遍历它的需要。

如果您不想走这条路,我至少建议您进行批量插入并一次添加多行(而不是对每一行进行一个插入查询)。

【讨论】:

    猜你喜欢
    • 2016-03-05
    • 2014-10-29
    • 2016-09-06
    • 2011-08-26
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多