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 :

Requête select * et pdo un casse tête ! [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2015
    Messages : 93
    Points : 63
    Points
    63
    Par défaut Requête select * et pdo un casse tête !
    bonjour,
    j'essaye temps bien que mal de réaliser un petit blog avec des requête PDO étant donne que MYSQL devrais être obsolète sous peu
    mais j'avoue que c'est requête PDO me pose de sacré problème
    lorsque je clique sur le titre d'un commentaire sur ma page index il envoi l'id du commentaire afin de le récupérer dans ma page read_com jusque ici ca va

    mais de la commence le problème :
    • si je laisse dans ma requête "$data = $q->fetch(PDO::FETCH_ASSOC);" il récupère le premier commentaire sans problème
    • et lorsque je change "$data = $q->fetchALL(PDO::FETCH_ASSOC);" là plus rien de n'affiche hormis mes label


    si quelqu'un peu me mettre sur la voix afin de pouvoir récupérer tout mes commentaires et m'expliquer éventuellement quelle est mon erreur
    merci d'avance de votre aide et de vos réponse.

    j'ai 2 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TABLE billet :
    id 	
    titre 	
    contenu 	
    date_creation 	
    auteur
     
    TABLE commentaires
    id 	
    billet_id
    auteur
    commentaire 
    date_commentaire
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php 
    	require 'database.php';
    	$billet_id = null;
    	if ( !empty($_GET['billet_id'])) {
    		$billet_id = $_REQUEST['billet_id'];
    	}
    	$id = $billet_id;
    	echo ''.$id.'';
     
    	if ( null==$id ) {
    		header("Location: index.php");
    	} else {
    		$pdo = Database::connect();
    		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$sql = "SELECT * FROM commentaires where billet_id = ?";
    		$q = $pdo->prepare($sql);
    		$q->execute(array($billet_id));
    		$data = $q->fetchALL(PDO::FETCH_ASSOC);
    		Database::disconnect();
    	}
     
     
    ?>
     
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <meta charset="utf-8">
    	<link rel="stylesheet" href="style.css" />
        <!--link   href="css/bootstrap.min.css" rel="stylesheet"-->
        <!--script src="js/bootstrap.min.js"--><!--/script-->
    </head>
     
    <body>
        <div class="container">
     
        			<div class="span10 offset1">
        				<div class="row">
    		    			<h3>Detail</h3>
    		    		</div>
     
    	    			<div class="form-horizontal" >
    					  <div class="control-group">
    					    <label class="control-label">titre :</label>
     
    						    <label class="checkbox">
    						     	<?php echo $data['auteur'];?>
    						    </label>
    					    </div>
    					  </div>
    					  <div class="control-group">
    					    <label class="control-label">Date :</label>
     
    						    <label class="checkbox">
    							<?php echo $data['commentaire'];?> 
     
    						    </label>
    					    </div>
    					  </div>
    					  <div class="form-horizontal" >
    					  <div class="control-group">
    					    <label class="control-label">contenu :</label>
     
    						    <label class="checkbox">
    						     	<?php echo $data['date_commentaire'];?>
    						    </label>
    					    </div>
    					  </div>
     
    					  <div class="form-actions">
    						  <a class="btn" href="index.php">retour</a>
    						  </div>
    					</div>
    				</div>
     
        </div> <!-- /container -->
      </body>
    </html>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut respecter la casse : fetchAll()

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque une boucle dans ton affichage pour lister tous les commentaires, elle devait bien exister dans ton code d'origine non ?

    Quelque chose comme :
    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
     
    <?php
    foreach ($data as $value) {
    ?>
    <div class="form-horizontal" >
    					  <div class="control-group">
    					    <label class="control-label">titre :</label>
     
    						    <label class="checkbox">
    						     	<?php echo $value['auteur'];?>
    						    </label>
    					    </div>
    					  </div>
    					  <div class="control-group">
    					    <label class="control-label">Date :</label>
     
    						    <label class="checkbox">
    							<?php echo $value['commentaire'];?> 
     
    						    </label>
    					    </div>
    					  </div>
    					  <div class="form-horizontal" >
    					  <div class="control-group">
    					    <label class="control-label">contenu :</label>
     
    						    <label class="checkbox">
    						     	<?php echo $value['date_commentaire'];?>
    						    </label>
    					    </div>
    					  </div>
    <?php } ?>
    Sinon l'extension mysql est déjà obsolète depuis 2 ans et a été supprimée de PHP7.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Avec un fetch, on récupère un objet PDO que l'on doit parcourir pour récupérer les résultats.
    Avec un fetchall on rècupère un array des résultats (qu'il faudra parcourir aussi).

    Ah et puis arrêtez de faire des requêtes préparées quand vous n'avez pas besoin de rejouer le même plan de requête x fois avec des paramètres différents.
    Ex:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $id=intval($billet_id);
    $SQL="SELECT * FROM commentaires where billet_id = $id";
    Ici pas d'injection SQL possible et un simple PDO->query($SQL)->fetchAll(); sera plus performant.

    ++

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    En toute logique ici while/fetch sera plus performant (en vitesse et ressources) que fetchAll.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Août 2015
    Messages : 93
    Points : 63
    Points
    63
    Par défaut
    Merci a tous pour vos réponse,
    +1 a vous

    donc pour faire court il semble que utiliser fetch ou fetchALL il faut quand même faire une boucle.
    il semble que c'est la chose que je n'avais pas capter je pensé qu'il faisait la boucle automatiquement...
    erreur de noob encore une foi...

    @tse_jc

    j'ai vraiment du mal avec les requête, de passer d'un Select,a un Update ou un Delete donc j'essaye de garder un modelè plus ou moins identique afin de les capter.

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

Discussions similaires

  1. [AC-2010] Traduire une requête Mysql vers accès. le casse tête
    Par Roroness dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/10/2015, 21h51
  2. requête select désensibiliser accents et casse
    Par mapmip dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/06/2011, 17h28
  3. Requête casse tête!
    Par sonorc dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2007, 02h03
  4. [Requête] SELECT sensible à la casse
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/02/2006, 14h23
  5. requête SQL un peu casse tête
    Par hellbilly dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/12/2005, 10h03

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