PHP - 将 csv 导入数据库数据太长

Posted

技术标签:

【中文标题】PHP - 将 csv 导入数据库数据太长【英文标题】:PHP - Import csv into database data too long 【发布时间】:2015-01-30 14:16:07 【问题描述】:

我正在尝试上传 CSV 文件以使用 php 将记录保存到数据库中。我用了sql方法LOAD DATA INFILE,但是还是不行。

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

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

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

.....(太长了)......K8docProps/app.xmlPK 数据对于第 1 行的“NombreUsuario”列来说太长了

是的,readfile 显示了这一点,所以我更改了每一列的详细信息(我认为这不是问题)并输入值 VARCHAR(200) / INTEGER(200),不管它不允许我输入更多长度,因为我尝试了 @987654326 @。

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

subirCSV.php

要求('../cabses.php'); 要求('../conecta.php'); if (isset($_POST['submit'])) if (is_uploaded_file($_FILES['csv']['tmp_name'])) 回显“文件”。 $_FILES['csv']['name'] ."上传成功。"; echo "显示内容:"; readfile($_FILES['csv']['tmp_name']); $handle = fopen($_FILES['csv']['tmp_name'], "r"); $标志=真; 而 (($data = fgetcsv($handle, 1000, " ")) !== FALSE) if($flag) $flag = false;继续; $import="INSERT INTO usuarios (NombreUsuario,PassUsuario,EmailUsuario,Nombre,Apellidos,IdPropietario,IdRol) 值 ( '".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($句柄); 打印“导入完成”; 别的 打印“不工作”;

也许是为了 UTF-8 编码?

这是我在 *** 上的第一个问题,来自西班牙的大家好!谢谢!

【问题讨论】:

旁注:MD5 不是存储密码的好/安全散列方法。请参考password_hash() 哦,很高兴知道!真的谢谢你! 【参考方案1】:

嗯,我终于完成了!首先,我意识到分隔符是 ;addslashes($data[0]) 可以正常工作。

你可以用我的代码试试看。

要求('../conecta.php'); if (isset($_POST['submit'])) if (is_uploaded_file($_FILES['csv']['tmp_name'])) $handle = fopen($_FILES['csv']['tmp_name'], "r"); $标志=真; 而 (($data = fgetcsv($handle, 1000, ";")) !== FALSE) if($flag) $flag = false;继续; $sql="INSERT INTO usuarios (NombreUsuario,PassUsuario,EmailUsuario,Nombre,Apellidos,IdPropietario,IdRol) 值 ( '".addslashes($data[0])."', '".addslashes(md5($data[1]))."', '".addslashes($data[2])."', '".addslashes($data[3])."', '".addslashes($data[4])."', '".addslashes($data[5])."', '".addslashes($data[6])."' ) "; $oConni->查询($sql); fclose($句柄); header('位置:../index.php'); 别的 打印“无功能”;

【讨论】:

【参考方案2】:

试试这个

$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';
        

【讨论】:

以上是关于PHP - 将 csv 导入数据库数据太长的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP CodeIgniter 将 CSV 数据导入 MYSQL 数据库?

我的 php 代码只是将我的 csv 文件的第一行导入数据库

excl数据怎么导入到MongoDB中,或者怎样将excl处理在导入到数据库中,数据量有4万条

最佳实践:使用 PHP 5.x 将 CSV 导入 MYSQL 数据库

csv数据导入Hadoop中的HDFS

将csv文件数据导入数据库