Script PHP para importar datos csv a mysql

He intentado con el siguiente código pero obtengo algunos errores. Aquí puedo leer el archivo de entrada, pero obtengo el siguiente error: Obsoleto: La función split () está en desuso en C: \ wamp \ www \ aaj2 \ index.php en la línea 63. O / P: Encontró un total de 5124 registros en este archivo csv.

 

EDITAR: Error: el archivo no se puede escribir, compruebe los permisos. Se encontró un total de 5124 registros en este archivo csv.

Solutions Collecting From Web of "Script PHP para importar datos csv a mysql"

Varios consejos:

  • No use la ext / mysql obsoleta , cuando puede usar ext / mysqli o PDO.

  • No lea todo el archivo csv en una variable de PHP. ¿Qué sucede cuando el archivo es de 500 MB?

  • No escriba código PHP personalizado para analizar datos csv, cuando puede usar la función integrada fgetcsv () .

  • No cree una nueva instrucción SQL para cada fila en los datos, cuando puede usar declaraciones preparadas .

  • No interpolar datos de un archivo externo en sentencias de SQL. Esto arriesga vulnerabilidades de inyección de SQL , al igual que cuando interpola una entrada de usuario no confiable.

  • No analice e inserte datos csv fila por fila, cuando puede usar el comando LOAD DATA INFILE de MySQL. Es 20 veces más rápido que insertar fila por fila.

Aquí hay una solución más simple:

 < ?php $databasehost = "localhost"; $databasename = "test"; $databasetable = "sample"; $databaseusername="test"; $databasepassword = ""; $fieldseparator = ","; $lineseparator = "\n"; $csvfile = "filename.csv"; if(!file_exists($csvfile)) { die("File not found. Make sure you specified the correct path."); } try { $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", $databaseusername, $databasepassword, array( PDO::MYSQL_ATTR_LOCAL_INFILE => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ) ); } catch (PDOException $e) { die("database connection failed: ".$e->getMessage()); } $affectedRows = $pdo->exec(" LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable` FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)." LINES TERMINATED BY ".$pdo->quote($lineseparator)); echo "Loaded a total of $affectedRows records from this csv file.\n"; ?> 

Probé esto con PHP 5.3.26 en una Mac, conectándome a MySQL 5.6.14 en Linux.

Prueba esto:

 < ?php // specify connection info $connect = mysql_connect('localhost','root','12345'); if (!$connect) { die('Could not  connect to MySQL: ' . mysql_error()); } $cid =mysql_select_db('test',$connect); //specify db name define('CSV_PATH','C:/wamp/www/csvfile/'); // specify CSV file path $csv_file = CSV_PATH . "infotuts.csv"; // Name of your CSV file $csvfile = fopen($csv_file, 'r'); $theData = fgets($csvfile); $i = 0; while (!feof($csvfile)) { $csv_data[] = fgets($csvfile, 1024); $csv_array = explode(",", $csv_data[$i]); $insert_csv = array(); $insert_csv['ID'] = $csv_array[0]; $insert_csv['name'] = $csv_array[1]; $insert_csv['email'] = $csv_array[2]; $query = "INSERT INTO csvdata(ID,name,email) VALUES('','".$insert_csv['name']."','".$insert_csv['email']."')"; $n=mysql_query($query, $connect ); $i++; } fclose($csvfile); echo "File data successfully imported to database!!"; mysql_close($connect); // closing connection ?> 
 **Data Import And Export** **CSV To Mysql AND Mysql To CSV Using Mysqli** < !DOCTYPE html>        
< ?php $host = "localhost"; $uname = "root"; $pass = ""; $database = "demo"; //Change Your Database Name $conn = new mysqli($host, $uname, $pass, $database)or die("No Connection"); echo mysql_error(); //MYSQL MYADDMINPHP TO CSV if (isset($_REQUEST['btn_export'])) { $data_op = ""; $sql = $conn->query("select * from users"); //Change Your Table Name while ($row1 = $sql->fetch_field()) { $data_op .= '"' . $row1->name . '",'; } $data_op .="\n"; while ($row = $sql->fetch_assoc()) { foreach ($row as $key => $value) { $data_op .='"' . $value . '",'; } $data_op .="\n"; } $filename = "Database.csv"; //Change File type CSV/TXT etc header('Content-type: application/csv'); //Change File type CSV/TXT etc header('Content-Disposition: attachment; filename=' . $filename); echo $data_op; exit; } //CSV To MYSQL MYADDMINPHP if (isset($_REQUEST['btn_import'])) { $filename = 'Database.csv'; $fp = fopen($filename, "r"); while (($row = fgetcsv($fp, "40", ",")) != FALSE) { $sql = "INSERT INTO users (name,pass,city,id) VALUES('" . implode("','", $row) . "')"; if (!$conn->query($sql)) { echo '
Data No Insert
'; } } fclose($fp); } ?>

Creo que primero necesita convertir el archivo CSV en la colección. Después de eso, puede agregar consultas de inserción de bucles y llamadas para insertar datos.

Aquí obtendrá el código para convertir el archivo CSV en una matriz de colección. la mejor manera de subir y leer el archivo csv en php