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 :

Injecter un fichier SQL dans une table en PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut Injecter un fichier SQL dans une table en PHP
    Bonjour à tous,


    Je coince dans une requête qui consiste à insérer des données issues d'un fichier SQL dans une table en PHP.

    Phpmyadmin ne me sera d'aucune utilité dans mon cas.


    Actuellement le script retourne une erreur mais je ne la comprend pas.

    Il affiche : Erreur SQL ! avec toute une série caractères illisibles correspondant certainement au contenu du fichier SQL

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $con=mysqli_connect("localhost","blabla","vlable","test2");
     
    $sql = file_get_contents("backup.sql");
    $sql_array = explode (";",$sql);
    foreach ($sql_array as $val) {
    mysqli_multi_query($con,$val)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    } 
    ?>
    Si qqun peut m'aider sur ce coup

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    Le contenu du fichier SQL devrait être lisible, s'il ne l'est pas, c'est probablement qu'il ne s'agit pas d'un simple fichier texte contenant des ordres SQL.

    Quelle est la valeur de $val ?

  3. #3
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Effectivement je viens de comprendre.

    Le fichier est zippé mais n'apparaissait pas comme tel avec winzip ou winrar

    Par contre je me dit que je vais utiliser gzopen pour le dézipper mais je ne vois pas ce que je fais comme erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $fp = gzopen("backup/backup.sql.gz", "r");
    $con=mysqli_connect("localhost","blabla","blable","test2");
    $sql = file_get_contents("backup.sql");
    $sql_array = explode ("; ",$sql);
    foreach ($sql_array as $val) {
    mysqli_multi_query($con,$val)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    } 
    ?>

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    Je n'ai jamais utilisé gzopen. J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $zip = new ZipArchive;
    $res = $zip->open('test.zip');
    Les variables $sql et $val sont-elles OK ?

    Avez-vous fait un test avec le fichier déjà dézipé ?

    php.net ne connait pas "mysqli_multi_query" : http://php.net/manual-lookup.php?pat...scope=quickref

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    php.net ne connait pas "mysqli_multi_query"
    Si si : http://php.net/manual/fr/mysqli.multi-query.php mais c'est pas toujours facile à retrouver.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Pour tester ma fonction d'insertion du fichier SQL, je l'ai dézippé à la main et l'insertion fonctionne bien.

    Il ne me reste plus qu'à solutionner le problème du dezippage automatique.

    En modifiant mon script avec ces 2 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $zip = new ZipArchive;
    $res = $zip->open('backup.sql.zip');
    le fichier ne veut toujours pas se dezipper.

    L'erreur retournée est qu'il ne trouve pas le fichier backup.sql.

    Que faire ?


    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
    <?php
     
    $zip = new ZipArchive;
    $res = $zip->open('backup.sql.zip');
     
    $con=mysqli_connect("localhost","blabla","blabla","test2");
     
    $sql = file_get_contents("backup.sql");
    $sql_array = explode ("; ",$sql);
    foreach ($sql_array as $val) {
    mysqli_multi_query($con,$val)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    } 
     
    ?>

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    Le "multi" ne me semble pas nécessaire car $val ne contient qu'une requête (il est issu du "explode ("; ",$sql)").
    Ou alors l'utiliser sans "explode ("; ",$sql)" ni boucle.

  8. #8
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Ok pour cette info je vais la tester.

    Mais je coince toujours sur le dezip.

    Comme ceci, il me retourne l'erreur 19 qui est "ER_NOZIP"

    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
    <?php
     
    $zip = new ZipArchive;
    $res = $zip->open('backup.sql.zip');
    if ($res === TRUE) {
        echo 'ok';
        $zip->extractTo('backup');
        $zip->close();
    } else {
        echo 'failed, code:' . $res;
    }
     
    $con=mysqli_connect("localhost","blabla","blabla","test2");
     
    $sql = file_get_contents("backup/backup.sql");
    $sql_array = explode ("; ",$sql);
    foreach ($sql_array as $val) {
    mysqli_multi_query($con,$val)or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    } 
     
    ?>

  9. #9
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2003
    Messages
    1 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 309
    Par défaut
    "ER_NOZIP" veut dire "N'est pas une archive ZIP. "

    Essayez de dézipper le fichier (avec 7zip / WinZip / WinRar / etc.) puis de le rezipper.

  10. #10
    Membre éclairé Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2010
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 354
    Par défaut
    Ok le problème vient du processus qui crée le ZIP

    En le dezippant et rezippant avec winrar le script fonctionne.

    Merci pour la soluce

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer un fichier csv dans une table avec une commande sql ?
    Par pepito62 dans le forum Import/Export
    Réponses: 8
    Dernier message: 25/03/2015, 15h10
  2. Script d'import d'un fichier XML dans une table SQL-Server
    Par thiersco dans le forum Développement
    Réponses: 2
    Dernier message: 26/11/2013, 09h45
  3. Réponses: 5
    Dernier message: 24/11/2010, 14h54
  4. Charger Fichiers XML dans une table avec SQL*LOADER
    Par devdev2003 dans le forum SQL
    Réponses: 2
    Dernier message: 14/01/2008, 10h40
  5. Réponses: 7
    Dernier message: 04/10/2005, 18h21

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