Schlaf
Messages postés12Date d'inscriptionlundi 10 janvier 2011StatutMembreDernière intervention10 janvier 2011
-
28 janv. 2010 à 09:10
kohntark
Messages postés3706Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 2012
-
28 janv. 2010 à 20:07
Bonjour,
Dans le cadre d'une gestion RH pour une agence EDF, je dois mettre a jour une table qui contients tous les agents de l'agence gràce a un script PHP.
La liste des agents se trouvent dans un fichier .csv qui est généré tous les mois. Je n'utilise que certains champs du fichier CSV.
Pour cela j'ai créé un code qui génère une requete a partir du fichier.
Le problème c'est que le fichier contient plus de 6000 enregistrements et l'envoi de la requete INSERT est très longue, l'explorateur plante.
J'ai bien modifié la valeur du time limit dans php.ini.
Y a t-il une manière de procéder pour accélérer le processus?
PS : Mon site inclu le PDO
Voici mon code :
<?php
// Nom du fichier
$nomfichier=$_GET["nomfichier"];
// Ouverture du fichier
$file = fopen( $nomfichier, 'r' );
// Connection à la base
$connect = mysql_connect('localhost','root','');
mysql_select_db('bdd',$connect);
if (!$connect) {die('Connexion impossible : ' . mysql_error());}
// Parcours toutes les lignes
$i=0;
$Insert="INSERT INTO `to_agent` VALUES ";
while ( ! feof( $file ) )
{
$i++; // on incrémente le numéro de la ligne
$line = fgets( $file, 1024 );
if ( strlen( $line ) > 2 && $i>1 )
{
$line = addslashes( $line );
$donnees = explode(";", $line);
if ($i==2)// Pour la 2ere ligne, la 1ere ligne est exclue
{
$Insert=$Insert."('$donnees[8]','$donnees[10]','$donnees[11]','$donnees[13]','$donnees[14]','$donnees[22]','$donnees[23]','$donnees[24]','$donnees[16]','$donnees[17]','$donnees[18]','$donnees[0]','$donnees[2]','$donnees[4]','$donnees[6]')";
}
else // Pour le reste des lignes
{
$Insert=$Insert.",('$donnees[8]','$donnees[10]','$donnees[11]','$donnees[13]','$donnees[14]','$donnees[22]','$donnees[23]','$donnees[24]','$donnees[16]','$donnees[17]','$donnees[18]','$donnees[0]','$donnees[2]','$donnees[4]','$donnees[6]')";
}
}
}
$result = mysql_query($Insert);
?>
Schlaf
Messages postés12Date d'inscriptionlundi 10 janvier 2011StatutMembreDernière intervention10 janvier 2011 28 janv. 2010 à 13:00
J'ai du mal a comprendre le fonctionnement du LOAD DATA INFILE.
Comment exclue t'on la 1ère ligne du fichier et comment détermine t'on quelle valeur d'une ligne on insert dans tel ou tel champ d'une table?
Merci
kohntark
Messages postés3706Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 28 janv. 2010 à 20:07
Comment exclue t'on la 1ère ligne du fichier et comment détermine t'on quelle valeur d'une ligne on insert dans tel ou tel champ d'une table?
Heu, en lisant la doc du lien proposé juste avant :
The IGNORE number LINES option can be used to ignore lines at the start of the file. For example, you can use IGNORE 1 LINES to skip over an initial header line containing column names: ...
You can also discard an input value by assigning it to a user variable and not assigning the variable to a table column:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3);
Je ne saurai être plus clair que cette doc.
Maintenant, si tu rencontres des problèmes, fournis le code que tu as tenté et explique les soucis que tu rencontres.