Bon j'en suis la et j'avance pas trop mal :
try {
// connexion
$pdo = new PDO('mysql:host=localhost;dbname=labase', 'PDO', '290585');
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);
$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(\PDO::ATTR_CASE, \PDO::CASE_LOWER);
$dir = new DirectoryIterator(dirname(__FILE__) . '\AVANT');
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot() && $fileinfo->isFile() && $fileinfo->getExtension() == 'data') {
//rename("./AVANT/$fileinfo", "./PENDANT/$fileinfo");
echo 'parse du fichier : '.$fileinfo->getFilename().'<br />';
$tabFile = file($fileinfo->getPathname());
preg_match('/^fic(\d+)-(\d+)-(\d+)-(\d+).data$/',$fileinfo->getFilename(),$match);
$table = $match[1];
$pdo->query("CREATE TABLE IF NOT EXISTS `$table` (dtlog INT, glot INT);");
$stmt = $pdo->prepare('INSERT INTO `'.$table.'` (dtlog, glot) VALUES (str_to_date(:dt,\'%Y%m%d\'),:glot) on duplicate key update glot=:glot');
if (count($tabFile) > 0) {
unset($tabFile[0]);
$i = 0;
foreach ($tabFile as $line) {
$csv = str_getcsv($line, ';');
$stmt->bindValue(':dt', $csv[1]);
$stmt->bindValue(':glot', $csv[2], PDO::PARAM_INT);
$stmt->execute();
echo 'insertion de la ligne '.$i.'<br />';
$i++;
//rename("./PENDANT/$fileinfo", "./APRES/$fileinfo");
}
}
}
}
} catch (Exception $e) {
echo $e->getMessage() . '<br />' . $e->getTraceAsString();
}
J'ai viré la première colonne "poste" et réussi à créer la table si elle n'existe pas par :
$pdo->query("CREATE TABLE IF NOT EXISTS `$table` (dtlog INT, glot INT);");
Pour mettre à jour automatiquement la valeur si déjà présente dans la table, je sais qu'il faut utiliser INSERT INTO ... ON DUPLICATE KEY UPDATE mais je fais une erreur avec le dernier paramètre glot=:glot, est ce parce que je n'ai pas défini de PRIMARY KEY ? :
$stmt = $pdo->prepare('INSERT INTO `'.$table.'` (dtlog, glot) VALUES (str_to_date(:dt,\'%Y%m%d\'),:glot) on duplicate key update glot=:glot');
Pour déplacer le fichier, je bloque également en ce qui concerne l'utilisation du fichier déplacé. Avec leSQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?=?' at line 1
#0 C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\scripts\testparserdata5.php(19): PDO->prepare('INSERT INTO `34...') #1 {main}
rename("./AVANT/$fileinfo", "./PENDANT/$fileinfo"); avant traitement et le rename("./PENDANT/$fileinfo", "./APRES/$fileinfo"); après traitement.
Merci!!!Warning: file(C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\scripts\AVANT\fic34154001-2013-10-03.data): failed to open stream: No such file or directory in C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\scripts\testparserdata5.php on line 15