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

标签 php mysql file csv fgetcsv

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

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

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

它们是字段 NOT NULL在'usuarios'数据库中。 所以这就是问题所在,当我尝试添加一条记录(例如:'bea')时,它说

.....(sooo long)......K8docProps/app.xmlPK Data too long for column 'NombreUsuario' at row 1

是的,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 中的第一个问题,来自西类牙的大家好!谢谢!

最佳答案

好吧,我终于完成了!首先,我意识到分隔符是 ; 并且 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";
            }
    }

关于PHP - 将 csv 导入数据库数据时间过长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27247639/

相关文章:

php - 在循环下拉函数中运行 mysql count 命令

php - 尝试创建表时无法修复 mysql 中的语法错误

php - 如何解决 PHP 中不能使用字符串偏移量作为数组错误?

php - 如何获取 PHP 核心函数列表以便编写函数包装器

python - 文件打开/阅读语言的速度是否取决于语言?

java - 用于查找文件夹中丢失的文件编号的代码

file - 文本编辑器如何插入文本?

php - Laravel Eloquent Relationship 自定义查询

php - 在动态页面上使用 PHP while 循环不起作用

mysql - 使用 MySQL 触发器在插入时创建数据库