Convertir CSV en SQL grâce à PHP

Hier, j’essayais péniblement de trouver un script pas trop contraignant pour transformer un fichier CSV en SQL (en requêtes “INSERT INTO” pour être plus précis). Comme je n’ai rien trouvé qui me plaisait, je me suis dit que j’allais rapidement le bricoler moi-même.
Je me suis aussi dit que ça pourrait servir à d’autres gens alors je l’ai mis en ligne : CSV2SQL

Ca a l’air de fonctionner relativement bien et relativement rapidement avec ce que j’ai pu essayer comme fichiers CSV (vous pouvez tester avec ce fichier : https://vinch.be//attic/test.csv) Il ne vous reste plus qu’à sauvegarder le résultat dans un fichier texte et à l’injecter dans votre SGBDR favori.

Pour ceux que ça intéresse et comme j’aime bien partager, voici le code source :

Fichier XHTML :

» Afficher le code source

Fichier PHP :

» Afficher le code source

N’hésitez pas à me faire part de vos remarques et suggestions d’améliorations.

15 Comments

  1. Pratique!
    Ce serait peut-être bien de pouvoir spécifier les types des champs, ou en tout cas pouvoir définir l’entourage champ par champ…
    Pour le séparateur, il y a aussi ":","|", et "\t" (tabulation).

    Like

  2. Unknown's avatar Benja says:

    Hello Vinch,
    Pour lire le CSV, j’ai vu la méthode fgetcsv()
    ( http://www.manuelphp.com/php/fun... )

    Like

  3. Ben's avatar Ben says:

    Salut,
    interessant ce petit script, je découvre ton site, qui est sympa également.

    Saurait-tu si il existe de bons scripts pour faire de la synchronisation de base de donnée Access vers MySQL ??
    Je suis en train de bosser sur un site qui aura besoin d’etre mis a jour souvent a partir de cette base access.

    Merci 😉

    Like

  4. Unknown's avatar Guillaume says:

    MERCI!!!
    J’ai cherché toute la journée d’hier, ce qui m’a permis de tester des logiciels qui faisaient tout tout seuls pour la modique somme de 70$.. desespéré, je tombe par hasard sur ton blog, et là, miracle!
    Merci pour ton travail, ça m’a évité bien des heures de boulot!!
    Bonne journée

    Like

  5. Guillaume's avatar Guillaume says:

    Merci pour ce script prêt à l’emploi

    Like

  6. manu's avatar manu says:

    Super pratique,

    merci vinch de partager ton travail !

    manu.

    Like

  7. Alex's avatar Alex says:

    Salut,

    tout d’abord merci, car ton code m’a beaucoup servi.
    J’ai apporté une option pour ceux qui veulent utiliser la première ligne pour définir les colonnes.

    Je pense que ça peut servir à d’autre donc voila le code :

    ################
    ## Le Fichier PHP ##
    ################

    header(‘Content-type:text/plain’);
    $separator = $_POST[‘separator’];
    $entourage = $_POST[‘entourage’];
    $table = $_POST[‘table’];
    $lines = file($_POST[‘file’]);

    if($_POST[‘usefirstline’]){
    $titles = explode($separator,$lines[0]) ; // récupération du titre des colonnes

    $title = “(” ;
    foreach($titles as $titles){
    $titles = trim($titles); // suppression des espaces au début et à la fin
    if($entourage!=”none”)
    $titles = substr($titles,1,strlen($titles)-2); // suppression des quotes
    $titles = str_replace(“‘”,”\'”,$titles); // echappement devant les simples quotes
    $title .= “$titles,”;
    }
    $title = substr($title,0,strlen($title)-1); // on supprime la dernière ,
    $title .= “)” ;

    unset($lines[0]); // suppression de la première ligne
    }

    foreach($lines as $line){
    $values = explode($separator,$line);
    $statement = “INSERT INTO $table $title VALUES (“;
    foreach($values as $value){
    $value = trim($value); // suppression des espaces au début et à la fin
    if($entourage!=”none”)
    $value = substr($value,1,strlen($value)-2); // suppression des quotes
    $value = str_replace(“‘”,”\'”,$value); // echappement devant les simples quotes
    $statement .= “‘$value’,”;
    }
    $statement = substr($statement,0,strlen($statement)-1);
    $statement.= “);”;
    echo $statement.”\n”;
    }

    ################
    ## Le Formulaire ##
    ################

    File URL

    Table name

    Fields separator

    ,
    ;

    Fields enclosed by


    Use first line as Title

    bonne continuation,

    Alex

    Like

  8. vinch's avatar Vinch says:

    Merci Alex, très utile !

    Like

  9. Nico's avatar Nico says:

    Muchas gracias !!!
    Top !

    Like

  10. Babylonia's avatar Babylonia says:

    Bonjour j’ai besoin d’un coup de main pour exécute le code je suis débutant dans la matière on vas dire et j’aurais besoins de votre aide, normalement il me suffit de faire une page avec le code html une autre avec le code php je les met dans le même fichier et c’est sensé me fait la même chose que quand je teste sur le site en ligne et pourtant je ne sais pas si l’écho ne se fait pas mais quand je clic sur submit la page reste blanche. je pourrais avoir un peut d’aide svp.

    Like

  11. Tom's avatar Tom says:

    Bonjour pouvez vous m’expliquez comment je doit faire pour lancé ce code, juste faire un essai.
    J’ai essayé de faire 2 fichier php, un avec le code html, l’autre avec le code php, et pourtant quand j’exécute le formulaire sa m’affiche une page blanche apparemment sans erreur, je n’ai fait qu’un copier coller des 2 code, et comme je n’y connais pas grand chose en php (on vas dir que je suis débutant) je ne sais pas si je doit mettre des ligne supplémentaire ou pas, pour faire la relation entre les 2 page sachant que quand je regarde le code source de la page blanche sous fire fox il me donne le code php que j’ai entrée.

    Like

  12. Mohamed's avatar Mohamed says:

    Salut VINCH,

    Vraiment merci pour votre script, il est simpa, simple et pratique . Il vas vraiment m’aider .
    Merci bcp
    J’espére que je trouverais plus de script util sur votre site

    Like

  13. Mohamed's avatar Mohamed says:

    en faite,

    Le code n’execute que 75% du fichier csv !! avez vous roncontré ce probléme ?

    Like

  14. MozoFok's avatar MozoFok says:

    Merci pour ce super script, j’avais quelques dizaines de milliers d’entrées a parser, ça m’a bien facilité les choses ! 😉

    Sinon, juste un truc a dire : le tout dernier echo de ton code comporte une coquillle. Il termine la ligne par ‘n’ au lieu d’un retour ligne. A corriger par un \r\n par exemple !

    Voila, bonne continuation et merci encore !

    Like

Leave a reply to Nico Cancel reply