Я пытаюсь загрузить файл 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
,
И вот мой код, я сделал это с другими примерами:
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, так что всем привет из Испании! И благодарю вас!
Ну вот я наконец то закончил! Сначала я понял, что разделитель ;
и с 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'); } еще { печать "Нет функции"; } }
Попробуй это
$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';
}