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 :

$row avec PDO et php5


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut $row avec PDO et php5
    Bonjour, j'ai un souci sur le traitement d'une requête. J'ai une application anciennement sous php4 que je suis en train de migrer sur PHP5.

    J'ai une requête sous PHP4/Mysql du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $query="MON SELECT... ";
    $dom = mysql_query($query) or die (mysql_error());
    while($row= mysql_fetch_array($dom)){
     
    $pass[$row[2]]['ATOM']=$row[1];
    if (!isset($pass[$row[2]]['BASE'])) {$pass[$row[2]]['BASE']=$row[3];}
    else{$pass[$row[2]]['BASE']+=$row[3];}
    if (!isset($pass[$row[2]]['ADRESSE'])) {$pass[$row[2]]['ADRESSE']=$row[4];}
    else{$pass[$row[2]]['ADRESSE']+=$row[4];}
     
    }
    Mon souci c'est que la nouvelle appli utilise PDO. Donc si je place un foreach comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $dom = $model->getResultat();
    foreach($dom as $row){
     
    $pass[$row[2]]['ATOM']=$row[1];
    if (!isset($pass[$row[2]]['BASE'])) {$pass[$row[2]]['BASE']=$row[3];}
    else{$pass[$row[2]]['BASE']+=$row[3];}
    if (!isset($pass[$row[2]]['ADRESSE'])) {$pass[$row[2]]['ADRESSE']=$row[4];}
    else{$pass[$row[2]]['ADRESSE']+=$row[4];}
     
    }
    Biensur ça ne marche pas.

    Alors vu que dans la suite du code j'ai une centaine de $row[1];$row[2]; etc... et je n'ai pas envie de modifier toute la centaine des $row avec les champs correspondants au risque de me tromper, je voudrais savoir s'il y a moyen d'accéder au résultat tout en conservant $row[0]; $row[1];$row[2];

    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    a quoi est égale $dom ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    C'est un tableau dont le var_dump retourne ceci

    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
     
    array(2) { 
    [0]=> array(5) { 
     
    ["id"]=> string(1) "4" 
    ["count(dom.id)"]=> string(1) "1" 
    ["nom"]=> string(11) "FRANCE" 
    ["sum(buts_dom)"]=> string(1) "1" 
    ["sum(buts_ext)"]=> string(1) "3" 
    } 
     
    [1]=> array(5) { 
    ["id"]=> string(1) "1" 
    ["count(dom.id)"]=> string(1) "1" 
    ["nom"]=> string(8) "BELGIQUE" 
    ["sum(buts_dom)"]=> string(1) "2" 
    ["sum(buts_ext)"]=> string(1) "4" }
     }

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    donc c'est pas $row[1] mais $row['id'] par exemple

  5. #5
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Oui c'est ce que j'ai dis. Le souci comme j'ai dit c'est que j'ai une centaine de ligne avec des $row[] à plusieurs indices. Donc si je me lance à remplacer tous les chiffre par les noms des champs $row[id], $row[nom]...etc je risque de faire des erreurs. Donc l'idéale aurait été que je conserve cette écriture ?

    Ne peut on pas récupérer dans mon exemple la valeur d'un tableau en lui spécifiant sa position par un indice ? Ou faut il forcément avec PDO mettre le nom du champ ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par yamatoshi Voir le message
    Oui c'est ce que j'ai dis. Le souci comme j'ai dit c'est que j'ai une centaine de ligne avec des $row[] à plusieurs indices. Donc si je me lance à remplacer tous les chiffre par les noms des champs $row[id], $row[nom]...etc je risque de faire des erreurs. Donc l'idéale aurait été que je conserve cette écriture ?

    Ne peut on pas récupérer dans mon exemple la valeur d'un tableau en lui spécifiant sa position par un indice ? Ou faut il forcément avec PDO mettre le nom du champ ?

    non ca se règle a la connexion, montre ce que t'as mis pour le moment

    et montre ta methode : getResultat (d'ailleurs ca viens d'ou ?)

  7. #7
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Dans mon controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $dom = $model->getResultat();
    foreach($dom as $row){
     
    $pass[$row[2]]['ATOM']=$row[1];
    if (!isset($pass[$row[2]]['BASE'])) {$pass[$row[2]]['BASE']=$row[3];}
    else{$pass[$row[2]]['BASE']+=$row[3];}
    if (!isset($pass[$row[2]]['ADRESSE'])) {$pass[$row[2]]['ADRESSE']=$row[4];}
    else{$pass[$row[2]]['ADRESSE']+=$row[4];}
     
    }
    Dans mon modele

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function getResultat(){
    		$registry = Zend_Registry::getInstance();
    		$db = $registry->get('db');
    		$requete = $db->prepare("
     
    		SELECT  * FROM users
          	        ");
    		$requete->execute();
    		$resultat = $requete->fetchall();
    		return $resultat;
    	}
    Resultat d'un var_dump sur $dom dans le controller ou $resultat dans le model me retourne ceci

    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
     
    array(2) { 
    [0]=> array(5) { 
     
    ["id"]=> string(1) "4" 
    ["count(dom.id)"]=> string(1) "1" 
    ["nom"]=> string(11) "FRANCE" 
    ["sum(buts_dom)"]=> string(1) "1" 
    ["sum(buts_ext)"]=> string(1) "3" 
    } 
     
    [1]=> array(5) { 
    ["id"]=> string(1) "1" 
    ["count(dom.id)"]=> string(1) "1" 
    ["nom"]=> string(8) "BELGIQUE" 
    ["sum(buts_dom)"]=> string(1) "2" 
    ["sum(buts_ext)"]=> string(1) "4" }
     }
    Dans mon controller si je fais var_dump($test);exit; et $test = $row[0]; j'ai à chaque fois la valeur nulle. Par contre effectivement si je met $row[id]; j'obtiens une valeur. Mais comme je le disais, dans la suite de mon programme j'ai un tas de code avec des $row[0]. Donc si je m'amuse à mettre les noms des champs partout je ne suis pas à l'abri d'une erreur.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    je sais bien ca, mais montre la ou tu créer ton Zend_Db

    sinon va falloir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resultat = $requete->fetchall(Zend_Db::FETCH_ROW);
    ps : ca sert a rien de faire une requête préparées si tu prépares rien, utilise query

  9. #9
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut
    Zend_db est crée dans mon fichier index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $db = Zend_Db::factory('Pdo_Mysql',array
    (
    'host'  => $config->database->host, 
    'username'  => $config->database->params->username,
    'password'  => $config->database->params->password,
    'dbname'  => $config->database->params->dbname,
    ));
     
    Zend_Db_Table::setDefaultAdapter($db);	//connexion à la base db par défaut.
     
    $registry = Zend_Registry::getInstance(); //Stockage de la connexion dans le registre
    $registry->set('db', $db);
    Lorsque je met ta solution j'ai une erreur : Undefined class constant 'FETCH_ROW'

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ou c'est FETCH_NUM dsl, mais tu peux mettre FETCH_BOTH c'est le même que mysql_fetch_array

    tu pourrais faire aussi apres ton Zend_Db::factory

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setFetchMode(Zend_Db::FETCH_BOTH)
    d'ailleurs il est un peux bizarre ton truc ca serai plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = Zend_Db::factory($config->database);

Discussions similaires

  1. [PDO] requête sql avec PDO impossible
    Par HALOMOTO dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2009, 00h17
  2. [PDO] Probleme avec PDO / PHP5
    Par anjin dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/08/2007, 07h33
  3. [XML] Comment envoyer un flux XML avec SOAP et PHP5 ?
    Par lehic dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 15/06/2007, 16h58
  4. [PDO] Pb instanciation $statement avec PDO sous PHP
    Par tigunn dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 22/02/2007, 20h45
  5. Débutant avec livre microapp PHP5, MACOSX
    Par rvm31 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 10
    Dernier message: 13/07/2006, 12h53

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