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 :

mysql_fetch_row en PDO [PDO]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut mysql_fetch_row en PDO
    Bonjour,

    Je transforme mon site écrit en PHP4 avec Mysql pour le passer en PHP5.5 avec PDO

    Dans l'ensemble, je progresse mais je rencontre un problème avec mysql_num_rows et surtout mysql_fetch_row que je n'arrive pas à réécrire en PDO

    Voici l'ancien 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
     
    <?
    elseif ($nbsites>0){
    	$query="SELECT compteur, title, url, description, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM annuaire_sites WHERE category='$id' AND valid=1 ORDER BY title ASC";
    	$res_racine = @mysql_query($query,$db);
    	if (mysql_num_rows($res_racine)!=0)
    		{
    		$nbracine=mysql_num_rows($res_racine);
    		$nbpage=ceil($nbracine/10);
    		if ($_GET['page']=="") {$page=1;}
    		for ($i=0; $i<$nbracine; $i++)
    			{
    			$list_racine=mysql_fetch_row($res_racine);
    			if ( ($i>=10*$page-10) and ($i<10*$page) )
            {
            echo "<table class='siteframe' width='100%'>\n";
            echo "<tr>\n";
            echo "<td valign='top'><a href='".$list_racine[2]."' class='site_links' target='_blank'><b>".$list_racine[1]."</b></a> - <span class='greytext'>".$list_racine[5]."</span><br /><p>".$list_racine[3]."</p><a href='".$list_racine[2]."' class='lien12' target='_blank'>".$list_racine[2]."</a></td>\n";
            echo "</tr>\n";
            echo "</table>\n";
            echo "<br />\n";
    				}
    			}
    		}
      }
    et voici le nouveau que j'ai réécrit :

    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
     
    elseif ($nbsites>0){
        $res_racine = $bdd_base->prepare("SELECT COUNT(*) FROM annuaire_sites WHERE category='$id' AND valid=1 ORDER BY title ASC");
        $res_racine->execute();
        $nb_racine = $res_racine->fetchColumn();
        $res_racine->closeCursor();
     
    	if ($nb_racine!=0)
    		{
    		$nbracine=$nb_racine;
    		$nbpage=ceil($nbracine/10);
    		if ($_GET['page']=="") {$page=1;}
    		for ($i=0; $i<$nbracine; $i++)
    		{
        $res_racine2 = $bdd_base->prepare("SELECT compteur, title, url, description, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM annuaire_sites WHERE category='$id' AND valid=1 ORDER BY title ASC");
        $res_racine2->execute();
     
    //while ($list_racine = $res_racine2->fetch(PDO::FETCH_NUM)) {
     
        $list_racine = $res_racine2->fetch(PDO::FETCH_NUM);
    		if ( ($i>=10*$page-10) and ($i<10*$page) )
    		  {
    			echo "<table class='siteframe' width='100%'>\n";
          echo "<tr>\n";
          echo "<td valign='top'><a href='".$list_racine[2]."' class='site_links' target='_blank'><b>".$list_racine[1]."</b></a> - <span class='greytext'>".$list_racine[5]."</span><br /><p>".$list_racine[3]."</p><a href='".$list_racine[2]."' class='lien12' target='_blank'>".$list_racine[2]."</a></td>\n";
    			echo "</tr>\n";
          echo "</table>\n";
          echo "<br />\n";
          }
    //} // pour la boucle while
    			}
    		}
      }
    Aucune anomalie mais un problème d'affichage des données.

    Sachant que la variable $nbracine vaut 6, cela m'affiche 6 fois la même ligne de données.

    Si je rajoute la boucle while mise en commentaire, cela m'affiche 6 fois les 6 lignes de données contenues dans la base

    Si quelqu'un peut me guider, je le(la) remercie
    Bonne journée

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Points : 242
    Points
    242
    Par défaut
    Bonjour,

    Essaye ce 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
    elseif ($nbsites>0) {
    	$page = isset($_GET['page']) ? intval($_GET['page']) : 0;
    	$nmax = 10;
    	$ndeb = $page * $nmax;
    	$q = "SELECT compteur, title, url, description, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM annuaire_sites WHERE category=? AND valid=1 
    	ORDER BY title ASC
    	LIMIT ?, ?";
    	$r = $bdd_base->prepare($q);
    	$r->execute( array($id, $ndeb, $nmax) );
    	$nbracine = $r->rowCount();
    	if ($nbracine>0) {
    		while ($list_racine = $r->fetch(PDO::FETCH_NUM)) {
    			echo "<table class='siteframe' width='100%'>\n";
    			echo "<tr>\n";
    			echo "<td valign='top'><a href='".$list_racine[2]."' class='site_links' target='_blank'><b>".$list_racine[1]."</b></a> - <span class='greytext'>".$list_racine[5]."</span><br /><p>".$list_racine[3]."</p><a href='".$list_racine[2]."' class='lien12' target='_blank'>".$list_racine[2]."</a></td>\n";
    			echo "</tr>\n";
    			echo "</table>\n";
    			echo "<br />\n";
    		}
    	}
    }

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonsoir selmouadin et un grand merci pour ta rapidité et pour ta proposition.

    Après quelques aménagements pour intégrer le code, mon obstacle est résolu et l'affichage est parfait.

    En plus, je garde ton code comme modèle pour mes autres modifications.

    Bonne soirée

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    en plus de la syntaxe avec des ?, il est possible de nommer plus précisément avec des noms de variables (par convention commencant par :, mais ça peut être autre chose) :
    (la même requête)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	$q = "SELECT compteur, title, url, description, mail, DATE_FORMAT(date_ins, '%d-%m-%Y') FROM annuaire_sites WHERE category = :id AND valid=1 
    	ORDER BY title ASC
    	LIMIT :ndeb, :nmax";
    	$r = $bdd_base->prepare($q);
    	$r->execute( array(
    		':id' => $id, 
    		':ndeb' => $ndeb, 
    		':nmax' => $nmax
    	) );
    Tu en verras tout l'intérêt quand tu auras de (très/trop?) nombreux champs !

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Bonsoir jreaux62,

    Effectivement, c'est un point que j'ai découvert en me mettant à PDO et je l'utilise assez souvent.

    Par contre, j'ai du mal avec les comptages et les affichages.
    J'ai découvert, avec le code de selmouadin, qu'on pouvait compter et afficher en une seule requête.

    J'avais l'impression que ma migration vers PDO provoquait un alourdissement de mon code et je vais essayer de l'alléger avec cette méthode.

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

Discussions similaires

  1. Mysql5, Procédure stockée et PDO::LastInsertId()
    Par Philsmile dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 10/04/2006, 13h59
  2. Warning: mysql_fetch_row() sur requete qui fonctione
    Par dark_vidor dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/03/2006, 18h05
  3. pdo mysql
    Par zenzo dans le forum Requêtes
    Réponses: 11
    Dernier message: 09/03/2006, 00h01
  4. [POO] PDO et fetch_INTO
    Par jeff_! dans le forum Langage
    Réponses: 6
    Dernier message: 25/01/2006, 14h22
  5. SELECT + mysql_fetch_row
    Par Atlante dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/10/2005, 16h16

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