【问题标题】:Uploading CSV file into mysql database using PHP使用PHP将CSV文件上传到mysql数据库
【发布时间】:2017-09-04 18:21:39
【问题描述】:

我在将 CSV 文件上传到我的 MySQL 数据库时遇到问题。我不是一个非常有经验的编码员,如果我试图解决问题的尝试已经结束,我很抱歉,但我将包括我迄今为止尝试过的内容。

这是代码的 HTML 部分:

<form enctype="multipart/form-data" action="camperUpload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" /><br />
<input type="submit" value="Upload File" class="btn btn-border" />
</form>

这里是 PHP 部分:

function processFile($uploadedFile) {



    // file contents
    $file_contents = $uploadedFile["tmp_name"];

    $SQL_statement = "LOAD DATA LOCAL INFILE '$file_contents' INTO TABLE C_CAMPER FIELDS TERMINATED BY ','
                        LINES TERMINATED BY '\n' IGNORE 3 LINES
                        (camperFName,campLName,camperAddress,camperCity,camperZip,camperCountry,camperPhone,camperEmail,@camperAltEmail,@camperDOB,camperAge,camperSchool,camperGradYear,camperGPA,camperACT/SAT,camperPar,camperParPhone,camperPrimPos,camperSecPos);";
SET camperDOB = STR_TO_DATE(@camperDOB, '%b-%d-%Y'),
    camperAltEmail = NULLIF(@camperAltEmail, 'null');"
    // Run SQL query
    $DB->execute($SQL_statement);

CSV 文件的前两行并不重要,只有一行是标题,所以我让它跳过前三行。文件中的日期格式是 1999 年 6 月 5 日,所以我认为我必须尝试更改它。我放了“LINES TERMINATED BY '\n' IGNORE 3 LINES”,但我不确定我是否应该这样做,这些行不会被任何东西终止。

我正在为我的数据库使用 phpMyAdmin,以防万一。

当我尝试执行此操作时,它只会转到一个页面,该页面显示该页面无法正常工作......所以我知道我可能已经离开或丢失了一些东西。任何帮助将不胜感激,谢谢!

编辑: 这是我的 PHP 文件,其中包含 Vasiliy Zverev 建议的更改。现在它不起作用,因为显然 phpMyAdmin 的 LOAD DATA LOCAL INFILE 命令有问题?

 <?php
    // version 1.02
    // display errors for debugging
    ini_set("display_errors", true);
    error_reporting(E_ALL);

    // Open a connection to the SQL server so we can run queries later. 
    $conn = new mysqli(removed for privacy); // DON'T FORGET TO EDIT THIS PART!
    // Output error info if there was a connection problem
    if ($conn->connect_errno) {
        die("<h3> Uh oh! It looks like we're having trouble connecting to the 
 website at the moment. Try again soon! {$conn->connect_error}</h3>");
    }

    // file name
    $file_contents = $_FILES["uploadedfile"]["tmp_name"];

    $SQL_statement = "LOAD DATA LOCAL INFILE '$file_contents' INTO TABLE C_CAMPER FIELDS TERMINATED BY ','
                        LINES TERMINATED BY '\n' IGNORE 3 LINES
                        (camperFName,campLName,camperAddress,camperCity,camperZip,camperCountry,camperPhone,camperEmail,@camperAltEmail,@camperDOB,camperAge,camperSchool,camperGradYear,camperGPA,`camperACT/SAT`,camperPar,camperParPhone,camperPrimPos,camperSecPos)
                        SET camperDOB = STR_TO_DATE(@camperDOB, '%m/%d/%Y'),
                            camperAltEmail = NULLIF(@camperAltEmail, 'null');";
    // Run SQL query
    if( !$conn->query($SQL_statement)) {
        echo $conn->error;
    }

    // Close the SQL connection
    $conn->close();
?>

【问题讨论】:

  • 以 SET camperDOB 开头的行不是字符串 $SQL_statement 的一部分。打开 PHP 错误报告。错误消息将向您显示发生了什么问题。
  • 另外,您的 SET 语句应该是一个更新,因为它将在 LOAD DATA 之后执行。
  • camperSecPos);"; set 必须是 camperSecPos) set
  • global $DB; 为什么定义为全局?你指的是连接吗?在我看来,您在这里使用了错误的变量,并且您的编辑和原始代码包含语法错误。
  • $uploadedFile 这是在哪里定义的?您希望从上传的文件中获取它;你正在使用的东西不起作用。

标签: php mysql csv import upload


【解决方案1】:

试试

<?php
    // version 1.02
    // display errors for debugging
    ini_set("display_errors", true);
    error_reporting(E_ALL);

    // Open a connection to the SQL server so we can run queries later. 
    $conn = new mysqli(removed for privacy); // DON'T FORGET TO EDIT THIS PART!
    // Output error info if there was a connection problem
    if ($conn->connect_errno) {
        die("<h3> Uh oh! It looks like we're having trouble connecting to the 
 website at the moment. Try again soon! {$conn->connect_error}</h3>");
    }

    // file name
    $file_contents = $_FILES["uploadedfile"]["tmp_name"];

    $SQL_statement = "LOAD DATA LOCAL INFILE '$file_contents' INTO TABLE C_CAMPER FIELDS TERMINATED BY ','
                        LINES TERMINATED BY '\n' IGNORE 3 LINES
                        (camperFName,campLName,camperAddress,camperCity,camperZip,camperCountry,camperPhone,camperEmail,@camperAltEmail,@camperDOB,camperAge,camperSchool,camperGradYear,camperGPA,`camperACT/SAT`,camperPar,camperParPhone,camperPrimPos,camperSecPos)
                        SET camperDOB = STR_TO_DATE(@camperDOB, '%m/%d/%Y'),
                            camperAltEmail = NULLIF(@camperAltEmail, 'null');";
    // Run SQL query
    if( !$conn->query($SQL_statement)) {
        echo $conn->error;
    }

    // Close the SQL connection
    $conn->close();
?>

【讨论】:

  • 初始化是什么意思?我将发布整个 PHP 页面供您查看,以及您所做的更改。编辑:我无法在此回复中发布代码,因此我将其编辑到原始帖子中。谢谢!
  • @Jacobra,我的意思是你必须先连接到mysql服务器并选择数据库。刚刚还更新了STR_TO_DATE()。
  • 它仍然无法正常工作。自添加 PHP 部分以来,它甚至没有对 PHP 部分进行任何错误报告。
  • @Jacobra,请试试这个新版本。
  • 我做到了,当我点击提交时它仍然只是说“这个页面不工作”。您认为代码的 HTML 部分有问题吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
相关资源
最近更新 更多