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

Discussion :

Probleme avec essai simple


Sujet :

PhpMyObject

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Probleme avec essai simple
    Bonjour, j'ai tenté d'utiliser PhpMyOject tout à l'heure.
    Je l'utilise avec une base PostgreSQL, mais meme avec un programme tout simple, je n'arrive pas a l'utiliser.
    Mon code, tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			require_once("core/PMO_MyController.php");		
    			$controler = new PMO_MyController();
    			$map = $controler->queryController("SELECT * FROM articles ORDER BY date_crea LIMIT 10; ");
    			
    			while ($result = $map->fetchMap()){
    				$article = $result['article'];				
    				echo("<h2>".$article->titre."</h2>");
    				echo($article->texte);
    			}
    Si j'utilise le driver pgsql, j'obtiens :
    En utilisant pdo, ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: Invalid argument supplied for foreach() in /home/fabien/public_html/pmo/core/PMO_MyController.php on line 48
    
    Warning: Invalid argument supplied for foreach() in /home/fabien/public_html/pmo/core/PMO_MyObject.php on line 40
    
    Warning: Invalid argument supplied for foreach() in /home/fabien/public_html/pmo/core/PMO_MyController.php on line 54
    J'ai essayé de voir le contenu de $table avant le foreach :
    Avec pdo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PMO_MyTable Object ( [table_name:protected] => articles [table_pk:protected] => [table_attribute:protected] => Array ( ) )
    Avec pgsql :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    PMO_MyTable Object
    (
        [table_name:protected] =&gt; articles
        [table_pk:protected] =&gt; Array
            (
                [0] =&gt; id_article
            )
    
        [table_attribute:protected] =&gt; Array
            (
                [id_article] =&gt; Array
                    (
                        [Type] =&gt; alnum
                        [Null] =&gt; 
                        [Key] =&gt; PRI
                        [Default] =&gt; 
                        [Extra] =&gt; 
                    )
    
                [texte] =&gt; Array
                    (
                        [Type] =&gt; alnum
                        [Null] =&gt; 
                        [Key] =&gt; NULL
                        [Default] =&gt; 
                        [Extra] =&gt; 
                    )
    
                [titre] =&gt; Array
                    (
                        [Type] =&gt; alnum
                        [Null] =&gt; 
                        [Key] =&gt; NULL
                        [Default] =&gt; 
                        [Extra] =&gt; 
                    )
    
                [date_crea] =&gt; Array
                    (
                        [Type] =&gt; alnum
                        [Null] =&gt; 
                        [Key] =&gt; NULL
                        [Default] =&gt; 
                        [Extra] =&gt; 
                    )
    
            )
    
    )
    Voyant, ca, j'ai rajouté un print_r($map) entre le queryController et le while dans mon code.


    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    PMO_MyMap Object
    (
        [map:protected] => Array
            (
                [0] => Array
                    (
                        [articles] => PMO_MyObject Object
                            (
                                [object_id:protected] => 0
                                [object_table:protected] => PMO_MyTable Object
                                    (
    					//Comme au dessus...
                                    )
    
                                [object_attribute:protected] => Array
                                    (
                                        [id_article] => 1
                                        [texte] => Ceci est un article de test. <b>A ignorer</b>
                                        [titre] => Article test
                                        [date_crea] => 2007-10-14 21:36:10.062253
                                    )
    
                                [object_linked:protected] => Array
                                    (
                                    )
    
                                [object_new:protected] => 1
                            )
    
                    )
    
            )
    
    )
    On voit que l'article est bien récupéré, mais il ne s'affiche pas après.
    Donc voila, je cherche comment faire pour faire marcher ca.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 181
    Points : 158
    Points
    158
    Par défaut
    Salut

    Je pense que ton problème vient de là

    ancien code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($result = $map->fetchMap()){
    	$article = $result['article'];
    devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($result = $map->fetchMap()){
    	$article = $result['articles'];
    car l'objet provient de la table articles

    Je te conseille très fortement d'utiliser aussi la version sur le subversion car elle corrige de très nombreux bug (notamment des bugs pdo)
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

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

    Informations forums :
    Inscription : juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai honte tellement l'erreur était bete.
    Pour la peine, j'ai testé la version SVN.
    En utilisant pgsql, ca marche bien.
    Par contre, avec pdo, bug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Fatal error</b>:  Uncaught exception 'PDOException' with message 'could not find driver' in /home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php:19
    Stack trace:
    #0 /home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php(19): PDO-&gt;__construct(':host=localhost...', 'm...', '.....')
    #1 /home/fabien/public_html/pmo/PMO_core/PMO_MySgbd.php(62): PMO_Sgbd_Pdo-&gt;connectSgbd(Array)
    #2 /home/fabien/public_html/pmo/PMO_core/PMO_MyController.php(29): PMO_MySGBD::factorySgbd(NULL)
    #3 /home/fabien/public_html/pmo/test.php(5): PMO_MyController-&gt;__construct()
    #4 {main}
      thrown in <b>/home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php</b> on line <b>19</b><br>
    donc j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "pdodriver"=>$pdodriverz);
    à la ligne 35 de PMO_MySgbd.php et la, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLSTATE[42601]: Syntax error: 7 ERREUR:  erreur de syntaxe sur ou près de «DESC»
    LINE 1: DESC articles ;
            ^
    alors que ma requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM articles ORDER BY date_crea LIMIT 10;
    Il vient d'ou le DESC?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 181
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par fabien_m Voir le message
    J'ai honte tellement l'erreur était bete.
    Pour la peine, j'ai testé la version SVN.
    En utilisant pgsql, ca marche bien.
    Par contre, avec pdo, bug
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Fatal error</b>:  Uncaught exception 'PDOException' with message 'could not find driver' in /home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php:19
    Stack trace:
    #0 /home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php(19): PDO-&gt;__construct(':host=localhost...', 'm...', '.....')
    #1 /home/fabien/public_html/pmo/PMO_core/PMO_MySgbd.php(62): PMO_Sgbd_Pdo-&gt;connectSgbd(Array)
    #2 /home/fabien/public_html/pmo/PMO_core/PMO_MyController.php(29): PMO_MySGBD::factorySgbd(NULL)
    #3 /home/fabien/public_html/pmo/test.php(5): PMO_MyController-&gt;__construct()
    #4 {main}
      thrown in <b>/home/fabien/public_html/pmo/PMO_core/PMO_sgbd_pdo.php</b> on line <b>19</b><br>
    donc j'ai rajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "pdodriver"=>$pdodriverz);
    à la ligne 35 de PMO_MySgbd.php et la, j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLSTATE[42601]: Syntax error: 7 ERREUR:  erreur de syntaxe sur ou près de «DESC»
    LINE 1: DESC articles ;
            ^
    alors que ma requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM articles ORDER BY date_crea LIMIT 10;
    Il vient d'ou le DESC?
    Oui, pour le moment pgsql n'est pas implémenté avec pdo. Pour répondre à ta question, PMO avant d'executer ta requête sql récupère le schéma des tables qui concerne ta requête SQL, il remplie comme ça les objets PMO_MyTable.

    Pour cela il execute la commande DESC.

    Il n'y a pas de drivers pgsql pdo parce que la commande DESC n'est pas implémenté nativement par pdo. Ca ne prend que quelques minutes pour créer ce driver, mais je ne l'ai pas fais pour des raisons d'archi, je ne trouve pas ça propre alors en attendant autant utiliser le driver pgsql
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je continue mon mini moteur de blog ^^ avec PMO dernière version
    Aujourd'hui, je tombe sur une erreur quand j'éxécute ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try{
    	$map = $controler->queryController("SELECT titre,date_crea,articles.texte,COUNT(id_com) AS num_coms FROM articles,commentaires WHERE id_article=id_art GROUP BY articles.titre,id_art,date_crea,articles.texte ORDER BY date_crea LIMIT 10; ");
    
    } 
    catch(Exception $e){
    	echo 'Oups, une exception : '.$e->getMessage();
    }
    et j'obtiens :"Error: attribute value is undefine"
    Pour commencer, c'est undefined
    Ensuite, est-ce que PMO gere les count()?
    Enfin, mais pas lié à PMO, je pense, php ne passe pas par le bloc catch,et je ne comprend pas trop pourquoi

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 181
    Points : 158
    Points
    158
    Par défaut
    Citation Envoyé par fabien_m Voir le message
    Je continue mon mini moteur de blog ^^ avec PMO dernière version
    Aujourd'hui, je tombe sur une erreur quand j'éxécute ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try{
    	$map = $controler->queryController("SELECT titre,date_crea,articles.texte,COUNT(id_com) AS num_coms FROM articles,commentaires WHERE id_article=id_art GROUP BY articles.titre,id_art,date_crea,articles.texte ORDER BY date_crea LIMIT 10; ");
    
    } 
    catch(Exception $e){
    	echo 'Oups, une exception : '.$e->getMessage();
    }
    et j'obtiens :"Error: attribute value is undefine"
    Pour commencer, c'est undefined
    Ensuite, est-ce que PMO gere les count()?
    Enfin, mais pas lié à PMO, je pense, php ne passe pas par le bloc catch,et je ne comprend pas trop pourquoi
    1- ok pour la correction orth
    2- Oui ça doit être le count qui provoque l'erreur. PMO ne gère pas les noms de colonne ou count, max dans le select. Il faut "pour le moment" utiliser des select *. Tu as une méthode $map->numRows() qui te renvoit le nombre de ligne dans ta map .

    3-t 'as rien de plus dans le message d erreur ? normalement, effectivement tu devrais pouvoir récupérer l'exception dans ton bloc. Peut être une portion de code que j'ai mal cleané. Je vais controler sur une base chez moi
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 181
    Points : 158
    Points
    158
    Par défaut
    Je viens de regarder:

    2- Ton erreur provient du fait qu'il manque une colonne primary key dans le nom des colonnes que tu donnes dans ton select. Il faut donc utiliser des select * tant que le reste n'a pas été implémenté.

    3- pour le bloc catch, j'avais oublié de cleaner une partie du code. Je viens de faire la correction sur le subv. Il s'agit d'un bloc try catch qui se trouve dans la méthode querycontroller qui affichait le message en faisant un die. Cette portion du code n'a plus de raison d'exister.
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

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

Discussions similaires

  1. probleme avec une simple fonction
    Par francky57 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/10/2008, 11h01
  2. Probleme avec un simple margin-top
    Par orphen dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 09/01/2008, 00h17
  3. probleme avec une simple requetes
    Par Babylonne dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/06/2007, 08h59
  4. probleme avec une simple requete
    Par nassimmm dans le forum Langage SQL
    Réponses: 11
    Dernier message: 03/08/2006, 17h46
  5. Ksh, problème avec une simple boucle for
    Par herzleid dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2006, 14h45

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