Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 24/04/2011, 01h27   #1
Membre du Club
 
Inscription : juillet 2009
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 209
Points : 53
Points : 53
Par défaut probléme avec PDO fetch

Bonjour cher développeur

d’habitude je travail avec PDO pour ce connecter a ma base de donnée J'ai du changer hébergeur pour que je me trouve que le nouveau hébergeur ne reconnais pas PDO

voila ma class pour la connections avec PDO

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
class AccB {
 
    public $a;
    public $r;
     public function conn()
     {
           $this->a=new PDO('mysql:host=localhost;dbname=_3gi', 'root', '');
 
     }
     public function Select($re)
     {
 
          $this->conn();
         $r=$this->a->query($re);
          return $r;
     }
      public function Exec($re)
     {
 
          $this->conn();
          $this->a->exec($re);
     }
et sa marche très bien

et pour résolu mon problème j'ai fais une autre class avec l’ancien version pour ce connecter a la base de donnée

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
class acc
    {
        public function conn()
        {
            $host ="localhost";
            $user = "root";
            $bdd = "base";
            $passwd  = "";
            mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
            mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
        }
         public function Select($re)
        {
            $this->conn();
            $r=mysql_query($re);
            return $r;
        }
        public function Exec($re)
        {
            $this->conn();
            mysql_query($re);
        }
    }
et sa marche très bien mais le problème c'est que dans tout le projet j'ai travailler avec

pour fetcher l'ensemble du donnée provenant de ma base


es ce que il ya pas de solution pour de travailler avec fetch car je ne veux parcourir tout mon projet en changent fetch par mysql_fetch_row()



Codialement Ryodo
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement.
Le français n'est pas ma langue maternelle, désolé pour les éventuelles fautes.
ryodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 08h23   #2
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Au lieu de retourner $r il faudrait que tu le stockes dans ta class.
Ensuite tu créées une fonction fetch() avec mysql_fetch_row() dedans et le tour est joué.

PS: plutôt que d'appeler à chaque requête une connexion à la bdd...
Crées une variable static de connexion où tu stockes la connexion.
Lors de l'appel à acc:conn() tu vérifies (dans cette fonction) que la variable static est null avant de lancer la connexion.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/04/2011, 12h13   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
par contre dans tes classe a chaque fois que tu fais une requete tu te reconnecte c'est pas très optimisé
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 13h02   #4
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Meurthe et Moselle (Lorraine)

Informations professionnelles :
Activité : Développeur

Informations forums :
Inscription : août 2010
Messages : 587
Points : 861
Points : 861
je ne vois pas trop l’intérêt de créer des classes qui reprennent des méthodes existante de la classe PDO si ce n'est d'écrire 50 lignes de codes supplémentaire...à moins de vouloir faire un singleton afin de limiter le nombre de connexion par session.
Ça me rappel un collègue de formation qui avait fait une fonction pour chaque type de requete SQL plutot que de factoriser le tout genre :
Code :
execute($requete,$typeRequete)
et d'en retourner la ressource ou le nombre de lignes affectées...
J'adore la POO!
__________________
Développeur informatique contrarié...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2011, 15h37   #5
Membre du Club
 
Inscription : juillet 2009
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 209
Points : 53
Points : 53
Merci pour Remarque je vais voir comment rendre ma class singleton



Citation:
Envoyé par transgohan Voir le message
Au lieu de retourner $r il faudrait que tu le stockes dans ta class.
Ensuite tu créées une fonction fetch() avec mysql_fetch_row() dedans et le tour est joué.
comment je peux faire stp ?
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement.
Le français n'est pas ma langue maternelle, désolé pour les éventuelles fautes.
ryodo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2011, 09h30   #6
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Code php :
1
2
3
4
5
6
7
public function fetch()
{
  $result = array();
  while($res = mysql_fetch_row($this->r) )
    $result[] = $res;
  return $result;
}
Il n'y a rien de plus simple.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 25/04/2011, 12h31   #7
Membre du Club
 
Inscription : juillet 2009
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 209
Points : 53
Points : 53
Citation:
Envoyé par transgohan Voir le message
Code php :
1
2
3
4
5
6
7
public function fetch()
{
  $result = array();
  while($res = mysql_fetch_row($this->r) )
    $result[] = $res;
  return $result;
}
Il n'y a rien de plus simple.

ouii c'est trop simple merci

mais ou je doit mètre ce code car j'ai plus de 50 pages dans mon projet et tous utilise la fonction fetch pour fetcher la base de donnée

voila un exemple d'etulisation

Code :
1
2
3
4
5
 
 while($rslt=$tab->fetch())
    {
            echo "$tab[0]";
    }
Merci bcp
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement.
Le français n'est pas ma langue maternelle, désolé pour les éventuelles fautes.
ryodo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/04/2011, 08h28   #8
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 802
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 802
Points : 1 515
Points : 1 515
Hum oui déjà j'ai fait une fonction fetchAll plutôt que fetch... Donc pas de boucle à faire mais renvoyer directement le retour de mysql_fetch_row().

Mais j'en viens tout de même à me poser des questions... Tu avoues finalement que c'est simple sauf que ta phrase suivante annonce clairement que tu n'as absolument rien compris à ce code...
Il serait peut être bon de revoir le concept de la programmation objet.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/04/2011, 11h10   #9
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Quitte à utiliser une "vieille" version, autant utiliser mysqli_* plutôt que mysql_*.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 15h27   #10
Membre du Club
 
Inscription : juillet 2009
Messages : 209
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 209
Points : 53
Points : 53
Citation:
Envoyé par transgohan Voir le message
Hum oui déjà j'ai fait une fonction fetchAll plutôt que fetch... Donc pas de boucle à faire mais renvoyer directement le retour de mysql_fetch_row().

Mais j'en viens tout de même à me poser des questions... Tu avoues finalement que c'est simple sauf que ta phrase suivante annonce clairement que tu n'as absolument rien compris à ce code...
Il serait peut être bon de revoir le concept de la programmation objet.
OK noble roi Merci pour votre aide
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement.
Le français n'est pas ma langue maternelle, désolé pour les éventuelles fautes.
ryodo est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h17.


 
 
 
 
Partenaires

Hébergement Web