Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/08/2007, 14h07   #1
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Par défaut [SQL] [Firebird] Requête SQL en PHP

Bonjour. Je cherche à obtenir un menu deroulant avec le resultat d'une requete SQL (elle fonctionne j'ai testé en mode console, "ISQL" pour moi) mais en tapant le code suivant je n'obtient rien.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$sth = $dbh->query("SELECT rdb$field_name AS CHAMP FROM rdb$relation_fields WHERE rdb$relation_name='LOT'");
	echo "Champ : ";
	echo "<select name=champ>";	
 
	foreach($sth AS $row)
		{
			echo ('<option>'.$row['CHAMP'].'</option>');
		}
 
	echo "</select>";
	echo "<p>";
c'est une base firebird 1.5 avec une extension php_pdo. Merci de votre aide!!!
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h08   #2
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
Pourrais tu expliquer ce qui ne fonctionne pas ?

As tu des résultats?
erreur php ?
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h09   #3
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
J'ai équalement tester:

Code :
1
2
3
4
5
6
7
8
 
$stmt = $dbh->prepare("SELECT RDB$FIELD_NAME AS CHAMP FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='LOT'");
 
	$stmt->execute(); 
 
	$row = $stmt->fetchAll(); 
 
	print_r($row);
Mais j'obtient une erreur:

Fatal error: Call to a member function execute() on a non-object

Merci. Help ME
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h11   #4
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Avec le premier code, je n'obtient rien dans mon select mais pas d'erreur.
Je voudrais un menu deroulant permettant de choisir un champ obtenu grace a la requete SQL.
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h11   #5
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
L'erreur php qui est indiqué semble vouloir dire qu'il ne connait pas de fonction "execute" dans ton objet $stmt

Pourrais tu montrer comment tu as implémenté $stmt ? definition de l'objet.
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h14   #6
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Pour moi $stmt correspont à le requete:

Code :
1
2
 
$stmt = $dbh->prepare("SELECT RDB$FIELD_NAME AS CHAMP FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='LOT'");
Il faut declarer un objet??
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h17   #7
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
Autant pour moi me suis trompé dans ma demande

Pourrais tu me montrer comment est contruit ta fonction prepare de l'objet $dbh car en fait c'est lui qui contient les instructions de connexions avec ta base de données
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h20   #8
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
$db est defini comme cela:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$db = 'C:\Program Files\Firebird\Firebird_1_5\Metadonnees\METADONNEES.GDB'; //nom de la base de données
	$host = 'localhost'; // nom de la machine hôte
	$user = 'SYSDBA'; // nom de l'utilisateur
	$pwd = 'masterkey';// mot de passe 
 
	$dsn = "firebird:dbname=$host:$db"; 
 
	try
		{
			$dbh = new PDO($dsn, $user, $pwd);
       	}
 
	catch(Exception $e)
		{
			echo 'Erreur : '.$e->getMessage().'<br />';
			echo 'N° : '.$e->getCode();
		}
La fonction "prepare" est elle definie dans l'extension php_pdo me semble t'il.
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h25   #9
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
D'après ce que je lis dans la documentation, la synthaxe est correcte :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 <?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (nom, valeur) VALUES (:nom, :valeur)");
$stmt->bindParam(':nom', $nom);
$stmt->bindParam(':valeur', $valeur);
 
// insertion d'une ligne
$nom = 'one';
$valeur = 1;
$stmt->execute();
 
// insertion d'une autre ligne avec des valeurs différentes
$nom = 'two';
$valeur = 2;
$stmt->execute();
?>
Peut être faut il obligatoirement utilisé "BindParam" et donc utilisé totalement l'aspect des requêtes préparé pour que cela marche.

http://fr3.php.net/pdo
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h29   #10
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Non je ne pense pas j'utilise deja des requetes préparées sur ma base tel que:

Code :
1
2
3
4
5
6
7
8
 
$stmt= $dbh->prepare("SELECT NOM FROM CHAMP_LOT");
 
	$stmt->execute(); 
 
	$row = $stmt->fetchAll(); 
 
	print_r($row);
Et celle-ci fonctionne très bien!

Mais avec ma requete:

Code :
1
2
 
$stmt = $dbh->prepare("SELECT RDB$FIELD_NAME AS CHAMP FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='LOT'");
J'obtient une erreur! Cette requete permet de lister le nom des colonnes de la table "LOT" et elle fonctionne quand je la test en mode console.
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h36   #11
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
oué mais sur ta première requête :

Citation:
$stmt= $dbh->prepare("SELECT NOM FROM CHAMP_LOT");

tu n'utilise pas de clause where alors que ta deuxième requête tu en utilise un :

Citation:
$stmt = $dbh->prepare("SELECT RDB$FIELD_NAME AS CHAMP FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME='LOT'");
Peut être tenté de faire :

Code :
1
2
3
4
5
$stmt = $dbh->prepare("SELECT RDB$FIELD_NAME AS CHAMP FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME=:valeur");
$stmt->bindParam(':valeur', $valeur);
$valeur = 'LOT';
$stmt->execute();
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h48   #12
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
j'obtient une erreur:

Fatal error: Call to a member function bindParam() on a non-object

Que veut dire non-object?
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 14h56   #13
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
tu as bien fait un include de ta page php qui instancie l'objet $dbh ?

L'erreur indique que l'objet est vide ou qu'il n'a pas été instancié
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h01   #14
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Oui l'ai bien fait le
Code :
include("dbconnect.ini.php");
qui correspond à la page avec la connection à la base. Cela fonctionne puisque d'autre requete sur la même page que celle de mon problème fonctionnent.

Le problème vient peut être du faite que la requete correspond au nom des colonnes de la table!
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h02   #15
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
Je ne comprend pas ta phrase

Citation:
Le problème vient peut être du faite que la requete correspond au nom des colonnes de la table!
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h08   #16
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Code :
$stmt = $dbh->prepare("SELECT rdb$field_name AS CHAMP FROM rdb$relation_fields WHERE rdb$relation_name='LOT'");
Cette requete permet d'obtenir le nom des colonnes de la table 'LOT'. Elle ne permet pas d'obtenir des enregistrements presents dans la table 'LOT'. C'est peut etre ca qui derange! Yo c po
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h10   #17
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
il y a de grandes chances du fait que tes autres requêtes fonctionnent correctement !
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h14   #18
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
Je fais comment!

En présentant comme ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
$sth = $dbh->query("SELECT rdb$field_name AS CHAMP FROM rdb$relation_fields WHERE rdb$relation_name='LOT'");
	echo "Champ : ";
	echo "<select name=champ>";	
 
	foreach($sth AS $row)
		{
			echo ('<option>'.$row['CHAMP'].'</option>');
		}
 
	echo "</select>";
	echo "<p>";
$row['CHAMP'] ne contient pas les valeurs revoyées pas la requete, quelle pourait etre la variable!!!???

$row['field_name'] marche pas, $row['FIELD'] non plus ...

Merci
pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h20   #19
Membre éclairé
 
Étudiant
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 371
Points : 371
Envoyer un message via MSN à DroP
A quoi corespond ton rdb$ ?

De plus, tu as dis que ta requête fonctionnait quand tu l'exécutais en mode console, utilise tu le mettre login mot de passe dans php que celui que tu as utilisé dans la console ?
DroP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2007, 15h25   #20
Invité régulier
 
Inscription : juillet 2007
Messages : 43
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 43
Points : 6
Points : 6
rdb$fields et autres sont des variables intégrées à Firebird ou Interbase.

J'utilise le meme login et mot de passe que pour la console ISQL dans mon php.

pit2121 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h04.


 
 
 
 
Partenaires

Hébergement Web