Précédent   Forum du club des développeurs et IT Pro > PHP > PHP & SGBD > PHP & PostgreSQL
PHP & PostgreSQL Forum d'entraide sur PostgreSQL avec PHP. Avant de poster -> FAQ PostgreSQL, Cours PostgreSQL. Pour les questions concernant le moteur PostgreSQL plutôt que les fonctions PHP, merci d'utiliser le forum PostgreSQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/04/2012, 12h27   #1
Adsm05
Invité de passage
 
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 0
Points : 0
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 :
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 :
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!
Adsm05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2012, 13h28   #2
Seb33300
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 428
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 27
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : janvier 2007
Messages : 1 428
Points : 1 913
Points : 1 913
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 Engineer PHP 5.3

« 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
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2012, 13h42   #3
Adsm05
Invité de passage
 
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 0
Points : 0
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.
Adsm05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2012, 15h28   #4
Seb33300
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 428
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 27
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : janvier 2007
Messages : 1 428
Points : 1 913
Points : 1 913
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 Engineer PHP 5.3

« 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
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2012, 16h16   #5
Adsm05
Invité de passage
 
Inscription : janvier 2012
Messages : 10
Détails du profil
Informations forums :
Inscription : janvier 2012
Messages : 10
Points : 0
Points : 0
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..."

Adsm05 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2012, 18h00   #6
Benjamin Delespierre
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 3 890
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 25
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 890
Points : 8 582
Points : 8 582
Y'a plusieurs choses qui vont pas:

Ce bout de code
Code :
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 :
$sql = file_get_contents("insert_script.sql");
Ce bout de code
Code :
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 :
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
__________________
On vous a menti
PHP, Injection de dépendances et composants
La POO en PHP en 10 minutes pour moins
Suivez-moi sur GitHub et Twitter

N'oubliez pas de vous servir des bouttons , et
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 17h20.


 
 
 
 
Partenaires

Hébergement Web