首页 文章

PHP - 将csv导入数据库数据的时间过长

提问于
浏览
4

我正在尝试上传CSV文件以使用php将记录保存到数据库中 . 我使用了sql方法 LOAD DATA INFILE 但它无论如何都没有用 .

Index.php的格式为 <input name='csv' type='file' id='csv'/> .

我的文件上传有5个字符串列和2个整数(最后一个),而且它只有两行, Headers 和值 .

它们是'usuarios'数据库中的 NOT NULL 字段 . 所以这里's the problem, when I trying to add a record (for instance: ' bea')它说

.....(sooo long)...... K8docProps / app.xmlPK第1行的列'NombreUsuario'的数据太长

是的,readfile显示,所以我改变了每一列的细节(我不认为这是问题)并且放置值 VARCHAR(200) / INTEGER(200) ,不管它不会让我放更长的因为我试过 Specified key was too long; max key length is 767 bytes .

这是我的代码,我用其他例子做了:

subirCSV.php

require ('../cabses.php');
    require ('../conecta.php');
    if (isset($_POST['submit'])) {
        if (is_uploaded_file($_FILES['csv']['tmp_name'])) {
            echo "File ". $_FILES['csv']['name'] ." uploaded successfully.";
            echo "Displaying contents:";
            readfile($_FILES['csv']['tmp_name']);
        }
        $handle = fopen($_FILES['csv']['tmp_name'], "r");
        $flag = true;
        while (($data = fgetcsv($handle, 1000, " ")) !== FALSE) {
            if($flag) { $flag = false; continue; }
            $import="INSERT INTO usuarios (NombreUsuario,PassUsuario,EmailUsuario,Nombre,Apellidos,IdPropietario,IdRol) VALUES 
                            (
                                '".trim($data[0], '"')."',
                                '".trim($data[1], '"')."', 
                                '".trim($data[2], '"')."',
                                '".trim($data[3], '"')."',
                                '".trim($data[4], '"')."', 
                                '".trim($data[5], '"')."',
                                '".trim($data[6], '"')."'
                            )
                        ";
            $oConni->query($import) or die(mysqli_error($oConni)."____________".$import);
        }
        fclose($handle);
        print "Import done";
    } else {
        print "Not working";
    }

也许它是针对UTF-8编码的?

这是我在StackOverFlow中的第一个问题,所以来自西班牙的大家好!谢谢你!

2 回答

  • 1

    好吧,我终于完成了!首先,我意识到分隔符是 ; 并且 addslashes($data[0]) 工作正常 .

    您可以使用我的代码并尝试它 .

    require ('../conecta.php');
        if (isset($_POST['submit'])) {
                if (is_uploaded_file($_FILES['csv']['tmp_name'])) {
                    $handle = fopen($_FILES['csv']['tmp_name'], "r");
                    $flag = true;
                    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
                        if($flag) { $flag = false; continue; }
                        $sql="INSERT INTO usuarios (NombreUsuario,PassUsuario,EmailUsuario,Nombre,Apellidos,IdPropietario,IdRol) VALUES 
                                        (
                                            '".addslashes($data[0])."',
                                            '".addslashes(md5($data[1]))."',
                                            '".addslashes($data[2])."',
                                            '".addslashes($data[3])."',
                                            '".addslashes($data[4])."',
                                            '".addslashes($data[5])."',
                                            '".addslashes($data[6])."'
                                        )
                                    ";
                        $oConni->query($sql);
                    }
                    fclose($handle);
                    header('Location:../index.php');
                } else {
                    print "No funciona";
                }
        }
    
  • 2

    Try this

    $type=$_FILES['file']['type'];
        $filename=$_FILES["file"]["tmp_name"];
         $filename_csv = explode(".", $_FILES["file"]["name"]);
        $extension = end($filename_csv);
        if($extension=="csv")
        {
            if($_FILES["file"]["size"] > 0)
        {
            $file = fopen($filename, "r");
    
            while (($emapData = fgetcsv($file, 10000, ",")) !== FALSE)
            {
    
            $sql = mysql_query("insert into upload_data(spent,click,filename,date) values('$emapData[0]','$emapData[1]','$emapData[2]','$emapData[3]')") or die (mysql_error());
            mysql_query($sql);
            }
            fclose($file);
            echo $error1=ucwords('<div style="margin-left:60px;position: absolute;width: 400px; color: #006400;">CSV File has been successfully Imported</div>');
    
            }
            }
            else
            {
            echo $error1=ucwords('<div style="margin-left:60px;position: absolute;width: 400px; color: #CC0000;">Invalid File:Please Upload CSV File</div>');
           // echo 'Invalid File:Please Upload CSV File';
            }
    

相关问题