CSV vers MYSQL en php

Transformation d’une ligne csv à une requête SQL, le script remplace toutes les entrées à chaque fois, il ne met pas à jour mais est facilement transformable (voir la variable $q).

Attention :

Voici le script :

<?php
private $_normalizeChars = array(
    'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 
    'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 
    'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 
    'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 
    'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 
    'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 
    'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f'
);


/**
* Transforme la variable en clé pour mysql
**/

private function toDatabaseKey($var) {
    $var = utf8_encode($var); //encode pour strtr

    $var = strtr($var, $this->_normalizeChars); //remplace accents
    $var = preg_replace('/\s+/', '_', $var); //remplace espaces par _
    $var = preg_replace('/[^\w\d_ -]/si', '', $var); //remplace les autres caractères

}

/**
* Simple fonction d'exécution de la requête sql
**/

private function execQuery($q) {
    // Create a new query object.
    $db = DB::getInstance();

    try {
        return $db->exec($q);   
    } catch (PDOException $e) {
        echo $e->__toString();
    }

}

/**
* Script de transformation de CSV vers MYSQL,
* le script remplace toutes les valeurs de la sql à chaque fois
*
* @param $csv : chemin vers le fichier csv
* @param $db_table_name : nom de la table
* @return nb_requetes
**/

private function CSVToDatabase($csv, $db_table_name) {
    $db = DB::getInstance();
    $fields = array();

    if (($handle = fopen($csv, "r")) !== FALSE) {
        $row = 0;
        $nb_requetes = 0;

        while (($data = fgetcsv($handle, filesize($csv), ";")) !== FALSE) { 
        
        //le séparateur csv peut varier ; ou ,
            if ($row == 0) 
            {
                //Definition des champs
                $num = count($data);

                for ($c=0; $c < $num; $c++)
                    $fields[$c] = $this->toDatabaseKey($data[$c]);
        

            }  else {

                $num = count($data);

                $way = "REPLACE"; //Peut être modifié par INSERT 

                $q = " INTO ".$db_table_name." (";

                foreach ($fields as $key => $value)
                    $q .= ($key == $num - 1) ? $value . ')' : $value . ', ';

                $q .= " VALUES (";

                for ($c=0; $c < $num; $c++) {

                    $q .= "'".$db->quote(utf8_encode($data[$c]))."'";
                    if($c < $num - 1)
                        $q .= ", ";
                    
                }
                
                $q .= ($q) ? ');' : '';
                
                if($q) {
                    if($this->execQuery($way . $q))
                        $nb_requetes++;
                    else
                        return false;
                }

            }
            $row++;
        }
    }
    
    unlink($csv); //supression du fichier csv
    
    return $nb_requetes;
}