2017-02-14 158 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