[英]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
。 所以,你應該檢查
/tmp/php
文件夾中的權限。 /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.