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 :

[SQL] [Firebird] Requête SQL en PHP


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!!!

  2. #2
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    Pourrais tu expliquer ce qui ne fonctionne pas ?

    As tu des résultats?
    erreur php ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    J'ai équalement tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    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.

  5. #5
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    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.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Pour moi $stmt correspont à le requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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??

  7. #7
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    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

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    $db est defini comme cela:

    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
     
    $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.

  9. #9
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    D'après ce que je lis dans la documentation, la synthaxe est correcte :
    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
     
     <?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

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Non je ne pense pas j'utilise deja des requetes préparées sur ma base tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  11. #11
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    oué mais sur ta première requête :

    $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 :

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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();

  12. #12
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    j'obtient une erreur:

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

    Que veut dire non-object?

  13. #13
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    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é

  14. #14
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Oui l'ai bien fait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  15. #15
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    Je ne comprend pas ta phrase

    Le problème vient peut être du faite que la requete correspond au nom des colonnes de la table!

  16. #16
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $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

  17. #17
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    il y a de grandes chances du fait que tes autres requêtes fonctionnent correctement !

  18. #18
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    Je fais comment!

    En présentant comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  19. #19
    Membre chevronné
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 288
    Par défaut
    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 ?

  20. #20
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 43
    Par défaut
    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.


Discussions similaires

  1. Requêtes SQL dans serveur de sockets PHP
    Par Invité dans le forum Langage
    Réponses: 0
    Dernier message: 25/02/2015, 00h11
  2. [AC-2003] Requête sql sur requête sql en vba
    Par Smoovy35 dans le forum Access
    Réponses: 3
    Dernier message: 17/01/2011, 20h25
  3. [SQL] Problème requêtes SQL / php
    Par laulau37 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 02/07/2007, 15h48
  4. [SQL] PB requête SQL dans un script php et sous phpmyadmin
    Par badboys46 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 22/06/2007, 11h36
  5. [VB.NET] [SQL] Pb requête sql, récupérer des params. ?
    Par Pleymo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/02/2005, 20h15

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