我正在尝试上传 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/