2017-02-14 156 views
0

我想編碼一個頁面,允許導入一個CSV文件到數據庫中。我有問題讓導入工作。它已經有效的工作,但沒有明顯的原因,它停止工作。我知道該腳本正在連接到數據庫,因爲我向db中添加了一個手動條目,截斷清除了數據庫,但不導入數據。我有設置列的數據庫表,以反映csv中的每一列。任何人都可以請協助解決這個問題。這是我的代碼。csv文件導入數據庫,php

DB-config.php文件

<?php 
    define('_DB_HOST_NAME','localhost'); 
    define('_DB_USER_NAME','root'); 
    define('_DB_PASSWORD',''); 
    define('_DB_DATABASE_NAME','stock_planner'); 

    $dbConnection = mysqli_connect(_DB_HOST_NAME,_DB_USER_NAME,_DB_PASSWORD,_DB_DATABASE_NAME); 

?> 

的index.php

<?php 
    if(isset($_POST['submit'])){ 
     include_once 'db-config.php'; 
     if (!$dbConnection) 
     { 
      print "<h1>Unable to connect to the database, contact your administrator!</h1>"; 
     } 
     else 
     { 
     $truncate = "TRUNCATE TABLE stock_sales_report"; 
     $file = $_FILES['csv_stock']['name']; 
     $import = "LOAD DATA LOCAL INFILE '$file' 
       INTO TABLE stock_sales_report 
       FIELDS TERMINATED BY ',' 
       OPTIONALLY ENCLOSED BY '\"' 
       LINES TERMINATED BY '\n' 
       IGNORE 1 LINES;"; 
     mysqli_query($dbConnection,$truncate); 
     mysqli_query($dbConnection,$import); 
     print "<h1>successfully imported.</h1>"; 
     } 
    } 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Planner</title> 
</head> 
<body> 
    <form method='POST' enctype='multipart/form-data'> 
     Upload CSV: <input type='file' name='csv_stock' /> <input type='submit' name='submit' value='import' /> 
    </form> 
</body> 
</html> 
+2

你有錯誤嗎? – Ibu

+0

這可能與'$ _FILES'的臨時性有關:http://www.phpforkids.com/php/php-forms-file-uploads.php。爲了上傳,運行除isset之外的其他檢查? http://www.phpforkids.com/php/php-forms-file-uploads.php –

回答

0

首先,您需要使用具有對數據庫文件權限的帳戶連接。 (https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html#priv_file)FILE權限在服務器級授予,而不僅限於特定數據庫。

其次,如果文件沒有上傳到執行腳本所在的目錄,則需要將該文件的完整路徑發送到該命令。

+0

我有一個--secure-file-priv問題,它不會從我禁用的未經授權的文件夾位置接受我的文件。 然後,我的導入停止在csv值爲空的INT列上,我修改了sql查詢以在INT列上將空值更改爲0。 我現在碰到的問題是導入卡住了顯示在CSV中的非utf8字符,我可以通過將數據庫設置爲Collat​​ion爲Latin1來解決此問題,並且它導入了OK,但是這是一種很好的做法嗎?我想我需要一種在導入前從CSV中剝離這些十六進制字符的方法。什麼是最好的方式去做這件事? –

+0

UTF-8應該涵蓋你所有的字符集。您可能在數據庫整理和連接之間存在不匹配。 – databyss