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 :

Script qui lit et exécute requetes à partir d'un .sql


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut Script qui lit et exécute requetes à partir d'un .sql
    Bonjour à tous,

    Je suis actuellement en train de réaliser un projet qui me demande de travailler avec un fichier .sql qui contient des insert de ce genre (ce sont des INSERT provenant d'une base MySQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, `help`, `other`, `mandatory`, `lid`) VALUES ('11', '2', '6', 'L', 'Q-02', 'A quel corps appartenez-vous ?', '', '', 'N', 'Y', '0');
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, `help`, `other`, `mandatory`, `lid`) VALUES ('12', '2', '6', 'L', 'Q-03', 'Votre catégorie ?', '', '', 'N', 'Y', '0');
    INSERT INTO questions (`qid`, `sid`, `gid`, `type`, `title`, `question`, `preg`, `help`, `other`, `mandatory`, `lid`) VALUES ('13', '2', '6', 'S', 'Q-04', 'Votre service ?', '', '', 'N', 'N', '0');
    ...et je voudrais exécuter automatiquement ses insert. Pour cela j'ai écris un script qui (normalement) doit me supprimer les quotes inversées afin que la syntaxe soit compatible postgreSQL et par la suite les executer. Or, je me retrouve avec une erreur au niveau du pg_query que je n'arrive pas à resoudre

    Voici mon 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
    <?php
     
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('pgsql:host=localhost;dbname=BRL', 'user', 'mdp', $pdo_options);
     
     
     
    	$filename = "insert_script.sql"; // fichier texte
    	$file = fopen($filename, "r");
    	$sql = fread($file, filesize($filename));
    	fclose($file);
    	$requetes= $sql;
    	$array_requetes = str_replace( "`", "", $requetes);
    	$array_requetes = explode(";\n",$requetes);
    	foreach($array_requetes AS $query){
    		pg_query($bdd,$query);
    		echo "OK.<br>";
    	}
     
    ?>
    Une idée d’où cela pourrait venir?

    Merci d'avance!

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Et l'erreur du pg_query est ?

    à la troisième ligne la première quote n'es pas inversé sur le champ help
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Oui pardon simple erreur de copie pour la quote inversée.
    L'erreur est: "pg_query() expects parameter 1 to be resource, object given in C:\wamp\www\... on line 16.

  4. #4
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu mélanges PDO et les fonction pg_*

    Si tu veux utiliser PDO, tu dois utiliser la méthodes query qui va bien :
    http://php.net/manual/fr/pdo.query.php

    Si tu veux utiliser les fonctions pg_ alors tu dois te connecter à la base de données avec pg_connect() :
    http://www.php.net/manual/fr/function.pg-connect.php
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 10
    Points : 2
    Points
    2
    Par défaut
    Si je comprends bien il suffit juste de remplacer la ligne par celle ci Or j'ai encore une erreur: "PDOException: SQLSTATE[22021]: Character not in repertoire: 7 ERREUR: séquence d'octets invalide pour l'encodage..."


  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Y'a plusieurs choses qui vont pas:

    Ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $filename = "insert_script.sql"; // fichier texte
    $file = fopen($filename, "r");
    $sql = fread($file, filesize($filename));
    fclose($file);
    peut être avantageusement remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = file_get_contents("insert_script.sql");
    Ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $array_requetes = explode(";\n",$requetes);
    foreach($array_requetes AS $query){
      pg_query($bdd,$query);
      echo "OK.<br>";
    }
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (explode(';', $sql) as $query) {
      $results[$query] = $bdd->query(trim($query));
    }
    if (in_array(false, $results, true)) {
      foreach (array_keys($results, false, true) as $query) {
        echo "Error With: $query";
      }
    }
    else {
      echo "Everything went better than expected !";
    }
    Et normalement ça devrait rouler

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2011, 15h47
  2. comment trouver le script qui envoye des spam a partir de mon compte
    Par maya24 dans le forum Autres hébergeurs
    Réponses: 3
    Dernier message: 16/10/2007, 17h19
  3. probleme de requete mysql qui ne s'exécute pas
    Par anto48_4 dans le forum Requêtes
    Réponses: 6
    Dernier message: 23/03/2006, 11h51
  4. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 10h12
  5. Script qui s'exécute 2 fois!
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 07/12/2005, 10h48

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