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

PhpMyObject Discussion :

Probleme avec essai simple


Sujet :

PhpMyObject

  1. #1
    Candidat au Club
    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é
    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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
    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é
    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
    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é
    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é
    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.