我尝试上传CSV文件以使用php将记录保存到数据库中。我使用了sql方法LOAD DATA INFILE
,但它无论如何都没有用。
Index.php的格式为<input name='csv' type='file' id='csv'/>
。
我的文件上传有5个字符串列和2个整数(最后一个),而且它只有两行,标题和值。
它们是&{39; usuarios&#39;中的字段NOT NULL
。数据库。
所以这就是问题所在,当我尝试添加记录时(例如:&#39; bea&#39;)它表示
.....(sooo long)...... K8docProps / app.xmlPK数据太长,无法用于列&#39; NombreUsuario&#39;在第1行
是的,readfile显示,所以我更改了每一栏的详细信息(我不认为这是问题)并设置值VARCHAR(200) / INTEGER(200)
,不管它不会让我放更多因为我试过了Specified key was too long; max key length is 767 bytes
。
这是我的代码,我是用别人的例子做的:
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中的第一个问题,所以来自西班牙的大家好!谢谢你!
答案 0 :(得分:2)
好吧,我终于完成了!首先,我意识到分隔符是;
并且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"; } }
答案 1 :(得分:1)
试试这个
$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';
}