IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Import .sql sous PHP5


Sujet :

PHP & Base de données

  1. #1
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut Import .sql sous PHP5
    Bonjour,

    Je teste un petit bout de script recupere sur le net pour realiser un import de fichier sql via php.

    Le script en question est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php
    function mysql_import_file($filename, &$errmsg) 
    { 
       // lecture du fichier
       $lines = file($filename); 
     
       if(!$lines)  {
          $errmsg = "cannot open file $filename"; 
          return false; 
       } 
     
       $scriptfile = false; 
     
       /* Get rid of the comments and form one jumbo line */ 
       foreach($lines as $line)   {
          $line = trim($line); 
     
          if(!ereg('^--', $line)) {
             $scriptfile.=" ".$line; 
          } 
       } 
     
       if(!$scriptfile) {
          $errmsg = "no text found in $filename"; 
          return false; 
       } 
     
       /* Split the jumbo line into smaller lines */ 
     
       $queries = explode(';', $scriptfile); 
     
       /* Run each line as a query */
     
       foreach($queries as $query) {
          $query = trim($query); 
          if($query == "") { continue; } 
          if(!mysql_query($query.';')) 
          { 
             $errmsg = "query ".$query." failed"; 
             return false; 
          } 
       } 
     
       // retour true si la fonction reussie ^^
       return true; 
    }
    Le probleme c'est que j'ai l'erreur suivante sur certains enregistrement, erreur que je n'ai pas si je fait l'i mport par phpmyadmin par exemple. (mon fichier sql a d'ailleurs ete genere grace a un export phpmyadmin).

    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 ''Ardè' at line 1
    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 'che', 'RA'),
    J'ai 3 tonnes d'erreurs comme celle la ... Si je prend la ligne en question dans mon fichier sql :
    ('07', 'Ard&egrave;che', 'RA'),
    ('08', 'Ardennes', 'CA'),
    D'une facon plus generale, j'ai l'impression qu'il ne supporte pas la presence du caractere &.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le script découpe le fichier au caractère point-virgule, comme il y a un point virgule dans ton champ, ca casse tout.

    La meilleure methode pour importer un fichier sql c'est surement de le faire faire par mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql.exe < fichier.sql
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    Merci, je m'en suis apercu en meme temps ^^

    Le probleme c'est que suis sur du mutualise, et j'ai besoin de deployer ca en script ... Donc la ligne de commande, je n'y ai pas acces ...

    J'ai d'autres erreurs cependant ... Pas top ce script ...

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $queries = explode(';', html_entity_decode($scriptfile));
    En fait en jouant sur les htmlspecialchars, ca bousille completement les lignes de requete ...

    Pour empcher le bug d'explode, je dois les convertir avec html_entity_decode, mais en decodant les " et ', il n'est plus possible de faire la distinction entre les quotes de la requete et ceux des contenus ... Et me voila dans une impasse ...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    tu n'as pas accès a exec() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    Je pense que si mais les serveurs sql sont distants.

    EDIT :

    Je vois que ca passe bien si je reformate mon fichier sql en disant que chaque ligne est une requete et en ne gardant que du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    function importer($filename,
        				  &$errmsg,
        				  $prefixeModulable = FALSE) { 
     
    		// lecture du fichier
    		$lines = file($filename); 
     
    		if(!$lines)  {
     
    			$errmsg = "cannot open file $filename"; 
    			return false;
     
    		} 
     
    		foreach($lines as $line)   {
     
    			$line = trim($line);
     
    			if ($prefixeModulable)$line = str_replace("prefixe_table_",$prefixeModulable,$line);
     
    			if($line == "") { continue; } 
     
    			$requete = mysql_query($line,$this->link) or die(mysql_error());
     
     
    		} 
     
    		// retour true si la fonction reussie ^^
    		return true; 
    	}
    Le soucis, c'est que j'aimerai bien faire ce traitement en script, j'ai fait ca a la main sous textpad avec un mix d'expressions regulieres mais c'est cochon ...

    Une idee de regexp, il faudrai supprimer les retours a la ligne qui sont ne sont pas precedes de ";".

    J'ai essaye le pattern : [^;]\n mais ca remplace le dernier caractere des lignes traitees ...

Discussions similaires

  1. [Système] Fonction header('location) sous php5 et sql
    Par zouheir dans le forum Langage
    Réponses: 4
    Dernier message: 21/01/2009, 12h15
  2. Importer un fichier sql sous Oracle 10G
    Par turican2 dans le forum Import/Export
    Réponses: 3
    Dernier message: 20/05/2008, 20h51
  3. Importation d'une structre SQL sous SQL-SERVER 2000
    Par loic20h28 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/12/2007, 19h00
  4. Comment importer une table SQL sous Delphi ?
    Par Yeldra dans le forum Débuter
    Réponses: 3
    Dernier message: 28/10/2007, 10h37
  5. Importer un gros fichier SQL sous windows
    Par bigsister dans le forum Outils
    Réponses: 2
    Dernier message: 24/08/2007, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo