PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 03-01-2010 12:11:43

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

La réponse était là :D:D

$req=$co->query("SELECT COUNT(*) AS cpt FROM '".$table."'");    bad beurkkkkkkkkkkkk
$req=$co->query("SELECT COUNT(*) AS cpt FROM $table");          good


big_smile:D:D

l'intéressé se reconnaitra big_smile:D

a++


Hors ligne

#2 04-01-2010 07:52:01

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : La réponse était là :D:D

Je suis peut être pas l'intéressé mais je me reconnait tout de même. sad
Fichue vieilles habitudes dont on arrive pas à se dépêtrer...

Par contre ne devrait-on pas dire beurk pour le COUNT(*) ? ^^
C'est similaire au SELECT *

Dernière modification par xTG (04-01-2010 07:53:07)

Hors ligne

#3 04-01-2010 09:38:16

Maskime
Membre
Lieu : Paris 15ème
Inscription : 11-05-2009
Messages : 134
Site Web

Re : La réponse était là :D:D

Hannnnnnn

Provocation !
big_smile


La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes

Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs wink

Hors ligne

#4 04-01-2010 10:02:04

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : La réponse était là :D:D

big_smile:D:P:cool:
a++

Dernière modification par Pierrot (04-01-2010 10:02:34)

Hors ligne

#5 04-01-2010 12:43:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : La réponse était là :D:D

xTG a écrit :

Je suis peut être pas l'intéressé mais je me reconnait tout de même. sad
Fichue vieilles habitudes dont on arrive pas à se dépêtrer...

Par contre ne devrait-on pas dire beurk pour le COUNT(*) ? ^^
C'est similaire au SELECT *

Pas du tout, COUNT(*) compte les lignes de la table mais ne rappatrie pas toutes les colonnes comme le SELECT *


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 04-01-2010 13:55:39

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : La réponse était là :D:D

L'intéressé, c'était moi !!! Mais suite à mauvaise manip, flemme de reposter tout le post avec les codes

Je faisais une concat type mysql normal alors qu'avec PDO, cela ne fonctionnait pas : les quotes étaient en trop..

Thx Pierrot wink [t'as même eu droit à un mp ^^]


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#7 04-01-2010 14:11:21

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : La réponse était là :D:D

>>t'as même eu droit à un mp ^^


j'aurais préféré autre chose roll smile
a++

Hors ligne

#8 09-01-2010 10:54:14

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : La réponse était là :D:D

Bon... je suis toujours avec mon soucis... et ça me gave un peu [vive le passage a PDO ^^]
Soit une fonction basique


function cptfull($table,$champ,$cond) { // fonction compteur complet
  global $co;
  $req=$co->query("SELECT COUNT(*) AS cptfull FROM $table WHERE $champ = '".$cond."'");
  $row = $req->fetch(PDO::FETCH_OBJ);
  $cptfull = $row->cptfull;
  $req->closeCursor();
  return $cptfull;
  }
 

Appellée par une ligne tout aussi basique

$type = 'chainetexte';
echo cptfull('tab_rh',$type,'1').'<br />';

Mais alors, pk ça plantouille, Groudddiouuuuudiiouuuuuuu!


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#9 09-01-2010 13:09:08

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : La réponse était là :D:D

 
      function cptfull($table,$champ,$cond) { // fonction compteur complet
        global $co;
        $req=$co->query("SELECT COUNT(*) AS cptfull FROM $table WHERE $champ = '$cond'"); $row = $req->fetch(PDO::FETCH_OBJ); $cptfull = $row->cptfull; $req->closeCursor();
        return $cptfull;
}
 

Déjà cela serait mieux comme ça non si on respecte l'esprit du topic ? tongue

Hors ligne

#10 10-01-2010 08:01:07

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : La réponse était là :D:D

Respecter l'esprit, peut être..... en tout cas, ça ne fonctionne pas mieux ^^ [merci quand même wink]


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#11 10-01-2010 08:45:08

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : La réponse était là :D:D

Saluton,
Pourquoi ne pas employer la syntaxe sprintf ?

$req=$co->query(sprintf("SELECT COUNT(*) AS cptfull FROM %s WHERE %s = '%s'",$table,$champ,$cond));

Ou bien, encore mieux avec PDO, une requête préparée (prepared statement)


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#12 03-03-2010 16:16:22

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : La réponse était là :D:D

je déterre un peu le topic pour un problème qui me fait bizarre...

Alors que j'ai reussi à le faire tourner sur une plate-forme (herbergement Oxyd), j'ai tenté de le faire tourner sur Easyphp (2.0) [avec les extensions PDO activées, bien sur] et là,

Fatal error: Call to a member function fetch() on a non-object in H:\Partage\intranet\alcages\fct.php on line 7

Sachant que le fichier fct.php contient :

<?php
require 'secure/connection.php';
//--------Fonctions---------
function cptfull($table,$champ,$cond) { // fonction compteur complet
  global $co;
    $req=$co->query(sprintf("SELECT COUNT(*) AS cptfull FROM %s WHERE %s = '%s'",$table,$champ,$cond));
  $row = $req->fetch(PDO::FETCH_OBJ);
  $cpt = $row->cptfull;
  return $cpt;}
?>

et que j'appelle tout cela par un simple

<?php echo cptfull('latable',$type,'1');?>

Quelqu'un a-t-il une idée ??


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#13 03-03-2010 17:13:59

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : La réponse était là :D:D

Peut-être que la requête est vide et que donc il n'y a pas de PDOStatement généré.
Encore qu'un SELECT COUNT(*) devrait retourné soit une exception, s'il y a une erreur dans le code SQL, soit au moins un PDOStatement d'une ligne d'une colonne avec le résultat du comptage éventuellement égal à zéro.
Bizarre.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#14 03-03-2010 17:28:56

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : La réponse était là :D:D

Maljuna Kris a écrit :

Bizarre.

C'est bien ce que je me dis neutral


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#15 30-06-2010 08:05:05

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 620
Site Web

Re : La réponse était là :D:D

Bonjour,

Si vous vous trouvez ca bizarre moi je trouve ca normal. En effet l'option de commande PDO::FETCH_OBJ requiert que $cptfull soit un objet, vu que ce ne doit pas être le cas,

alnoss a écrit :

Fatal error: Call to a member function fetch() on a non-object in H:\Partage\intranet\alcages\fct.php on line 7

est plutôt normal.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#16 30-06-2010 12:10:42

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : La réponse était là :D:D

Ouh la ! Il ne faut pas confondre la fonction utilisateur cptfull(), avec l'attribut cptfull de l'objet $row chargé par $row = $req->fetch(PDO::FETCH_OBJ);
En l'occurrence il nous est dit que $req n'est pas un objet et qu'il n'a donc pas de methode fetch().
Or $req est un PDOSTATEMENT auquel on demande de retourner ces lignes de résultat sous forme d'objet.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#17 30-06-2010 20:24:43

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 620
Site Web

Re : La réponse était là :D:D

Bonjour,

Désolé me suis trompé de variable. Mais l'erreur viens bien de la

XTG a écrit :

function cptfull($table,$champ,$cond) { // fonction compteur complet
  global $co;
  $req=$co->query("SELECT COUNT(*) AS cptfull FROM $table WHERE $champ = '$cond'"); $row = $req->fetch(PDO::FETCH_OBJ); $cptfull = $row->cptfull; $req->closeCursor();
return $cptfull;
}

Ce que je voulais dire et là ou tu te trompe quand tu dis

Maljuna a écrit :

En l'occurrence il nous est dit que $req n'est pas un objet et qu'il n'a donc pas de methode fetch().

c'est qu'en fait au moment de l'affectation de l'objet retourné par la methode de $req sur la variable $row est que $row n'est pas un objet. Il faut donc au préalable définir $row comme objet dans la fonction avant de l'associer à l'objet retourné par la methode fetch de $req. $req est un PDOstatement (qui est un objet PDO) et il possède bien une méthode fetch^^.
Désolé donc pour cette précipitation dans ma réponse^^

Dernière modification par Jc (30-06-2010 20:28:38)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums