【问题标题】:Cannot Load Temp CSV file into MySQL Database无法将临时 CSV 文件加载到 MySQL 数据库中
【发布时间】:2014-02-13 19:45:08
【问题描述】:

我正在尝试将上传的 CSV 文件插入到我的 MySQL 数据库中,但是每次都失败; MySQL 表仍然显示为空我对 PHP/MySQL 还很陌生,所以任何建议都会很棒!

HTML

<input type="file" name="file" id="file">

JavaScript

function Upload_Text()
{               
var formData = new FormData();
var file = document.getElementById("file").files[0];
formData = new FormData();
var xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    var result = xmlhttp.responseText;
                    alert(result);

                }
            }
var url = "Upload_Text.php";
formData.append("thefile", file);
xmlhttp.open('POST', url, true);
xmlhttp.send(formData);
}

PHP

<?php
$file = $_FILES['thefile']['tmp_name'];
$link = new mysqli('address', 'usr', 'pwd', 'db');
if (mysqli_connect_error()) { echo "0"; die();}
    $statement = $link->prepare("LOAD DATA INFILE ? INTO TABLE Groups FIELDS TERMINATED BY ','  LINES TERMINATED BY '\n';");
    $statement->bind_param('s', $file); 
    $statement->execute(); 
?>

文件如下所示:

jakec,8
jim,5
debby,4
emily,8
terrence,2

感谢您的帮助

【问题讨论】:

  • 错误信息是什么?
  • 非常基本的问题:你得到了什么错误?
  • 您的表单是否包含enctype='multipart/form-data' 并且输入的名称确实称为thefile
  • 而这个$file = $_FILES['thefile']['tmp_name']; 应该是$file = $_FILES['thefile']['name']; 并使用var_dump(); 来查看它是否已设置。
  • name="file" 重命名为name="thefile" => $file = $_FILES['thefile']['tmp_name']; 这是主要问题。 &lt;input type="file" name="thefile" id="file"&gt; name 不匹配。试试看。

标签: php mysql csv


【解决方案1】:

改变了我的方法并能够使用以下方法:

<?php
$connect = mysql_connect('address', 'usr', 'pwd', 'db'); 
$handle = fopen($file,"r");
do {
    if ($data[0]) { 
        mysql_query("INSERT INTO Students (NetID, GroupID) VALUES 
            ( 
                '".addslashes($data[0])."', 
                '".addslashes($data[1])."'
            ) 
        "); 
    } 
} while ($data = fgetcsv($handle,1000,",","'")); 
?>

虽然我意识到这在 php 5.5.0 中已被贬低,所以我将不得不不可避免地对其进行更改

【讨论】:

  • 很高兴您找到了解决方案。我玩弄了这个想法,发现bind_param 不能用于使用您的原始代码。我自己无法使用 LOAD DATA INFILE 加载文件,可能是我的主机不允许我。
猜你喜欢
  • 2016-04-17
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多