mysql — слишком долго импортирует csv в базу данных

Я пытаюсь загрузить файл CSV для сохранения записей в базе данных с помощью php. Я использовал метод sql LOAD DATA INFILE но это все равно не сработало.

Index.php имеет вид с <input name='csv' type='file' id='csv'/>,

Мой файл загрузки имеет 5 строк столбцов и 2 целых числа (последнее из них), кроме того, он имеет только две строки, заголовок и значения.

Они поля NOT NULL в базе данных «Усуариос».
Так вот в чем проблема, когда я пытаюсь добавить запись (например: ‘bea’), он говорит, что

…..(ооочень долго) …… K8docProps / app.xmlPK Слишком длинные данные для столбца NombreUsuario в строке 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'])) {
эхо "Файл". $ _FILES ['csv'] ['name']. "Успешно загружено.";
echo "Отображение содержимого:";
ReadFile ($ _ FILES [ 'CSV'] [ 'tmp_name']);
}
$ handle = fopen ($ _ FILES ['csv'] ['tmp_name'], "r");
$ flag = true;
while (($ 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) или die (mysqli_error ($ oConni). "____________". $ import);
}
fclose ($ ручка);
распечатать «Импорт выполнен»;
} еще {
печать «Не работает»;
}

Может быть, это было для кодировки UTF-8?

Это мой первый вопрос в StackOverFlow, так что всем привет из Испании! И благодарю вас!

4

Решение

Ну вот я наконец то закончил! Сначала я понял, что разделитель ; и с 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; Продолжить; }
$ sql = "INSERT INTO usuarios (NombreUsuario, PassUsuario, EmailUsuario, Nombre, Apellidos, IdPropietario, IdRol) ЗНАЧЕНИЯ
(
' ".addslashes ($ данных [0])."',
'.Addslashes (md5 ($ данных [1])). "',
' ".addslashes ($ данных [2])."',
' ".addslashes ($ данных [3])."',
' ".addslashes ($ данных [4])."',
' ".addslashes ($ данных [5])."',
' ".addslashes ($ данных [6])."'
)
«;
$ OConni-> запрос ($ SQL);
}
fclose ($ ручка);
заголовок ( 'Location: ../ 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';
}
1

По вопросам рекламы [email protected]