簡體   English   中英

PHP的將數據本地文件CSV加載到MySQL

[英]php LOAD DATA LOCAL INFILE csv to mysql

在嘗試在這里提出第一個問題之前,我已經嘗試了一段時間,並研究了盡可能多的途徑。

我有一個非常簡單的csv文件。 一列,數據由linux換行符分隔。 我想將其導入到表(代碼)的第二列(密碼)中。 第一列是主鍵自動遞增。

這是簡單的csv數據(Linux換行符-\\ n)

A12345678911
A12345678912
A12345678913
A12345678914

這是收集文件的表格。

<form enctype="multipart/form-data" action="upload_webcodes.php" method="post">
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
        <input type="hidden" name="success" value="success" />
    Send this file: <input name="webcodeupload" type="file" />
    <input type="submit" value="Send File" />
</form>  

這是試圖運行查詢以將tmp文件加載到數據庫中的php。

<?php

function dbconnect(){
$db = mysql_connect('localhost', 'root', 'root');
mysql_select_db("mydatabase", $db);
return $db;
}

if ($_FILES['upload']['type'] === 'text/csv') { 
    $database = dbconnect();
    $getfile = $_FILES['upload']['tmp_name'];   
    $sql = " LOAD DATA LOCAL INFILE $getfile INTO TABLE codes (`passcode`) LINES TERMINATED BY '\n' ";
    mysql_query($sql);   
}
?>

我無法正常工作。 我正在與MAMP在本地嘗試。 / tmp / php文件夾“修改日期”已更新,但在那里看不到文件。 由於我的測試文件非常簡單,因此我什至嘗試過更大的文件。 提交表單后,我已經打印出$ _FILES數組。

Array
(
    [webcodeupload] => Array
        (
            [name] => Aimport.csv
            [type] => text/csv
            [tmp_name] => /Applications/MAMP/tmp/php/phpsp9ezx
            [error] => 0
            [size] => 52
        )

)

似乎有預期的結果? 我已經嘗試在phpmyAdmin中查詢,並且如果刪除LINES TERMINATED BY子句,它將起作用。 我懷疑這是phpmyAdmin的問題,我也嘗試過在查詢中是否包含該子句的代碼。

此外,加載頁面時還會出現一些“未定義索引”錯誤。 我有點理解為什么,並且在這里閱讀了一些線程來指示掩蓋錯誤的方法,但是我很想知道如何避免它們而不是隱藏它們。

任何輸入將不勝感激。

謝謝。

首先,您已經正確分析了,該文件應該在/tmp/php 所以,你應該檢查

  1. /tmp/php文件夾中的權限。
  2. 為了使MySQL能夠從/tmp/php目錄中讀取文件,在Linux中,請不要忘記在/etc/apparmor.d/usr.sbin.mysqld通過添加以下行/tmp/php/** rwk,來設置apparmor配置/tmp/php/** rwk,

將您的條件更改為:

if ($_FILES['webcodeupload']['type'] == 'text/csv') {
    // what you have now
}

您提供的轉儲顯示表單輸入字段為“ webcodeupload”,但是您的PHP正在檢查“ upload”。

腳本結束時文件不存在的原因很好,這就是php的工作方式。 您必須調用move_uploaded_file函數將上傳的文件實際移動到某個地方,否則PHP在腳本結束時將其刪除(以防止資源消耗攻擊)。

請注意, if語句中的內容可能還有其他問題,但這將使您更加接近。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM