Page 1 sur 1

PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 17:41
par mostelle
Bonjour à tous, je viens vers vous tous car là, je dois avouer que je ne comprends pas pourquoi ça ne marche pas. J'ai fait le tour du web, j'ai pas trouvé de réponse à mon problème.
Voilà mon code :
public function countPupilsBySport($idSchool,$sports){
		if (is_int($idSchool) && is_int($sports)) {
			$sql = "SELECT COUNT(:sportx) AS 'sport' FROM pupils WHERE :blind != 0 AND school_id = :schoolid;";
			$nbSports = 'sport'.$sports.'_id';
			$nbSportsTwice = 'sport1_id';
			$rocket = $this->dbh->prepare($sql);
			$rocket->bindParam(':sportx', $nbSports, PDO::PARAM_STR);
			$rocket->bindParam(':blind', $nbSportsTwice, PDO::PARAM_STR);
			$rocket->bindParam(':schoolid', $idSchool, PDO::PARAM_INT);
			$rocket->execute();
			$countPupilsBySport = $rocket->fetch(PDO::FETCH_ASSOC);
			return $countPupilsBySport['sport'];
		}
	}
Mon problème se situe au niveau de la requête où j'ai écrit ":blind" . Si je remplace dans ma requête SQL blind par sport1_id ça marche, si je la bind ça ne marche pas. Et j'ai essayé bon nombre de choses. Rien à faire il ne me prends pas le "!= 0" en compte. Le résultat est correct lorsque j'écris en dur, mais égale à zéro lorsque je le bind. Avant de faire autrement, j'aimerai bien savoir pourquoi parce que là je dois avouer que je sèche mais complètement… :-/

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 18:17
par Elie
Et si tu essayes rowCount http://php.net/manual/fr/pdostatement.rowcount.php
public function countPupilsBySport($idSchool,$sports){
                if (is_int($idSchool) && is_int($sports)) {
                        $sql = "SELECT * FROM pupils WHERE :blind != 0 AND school_id = :schoolid;";
                        $nbSportsTwice = 'sport1_id';
                        $rocket = $this->dbh->prepare($sql);
                        $rocket->bindParam(':blind', $nbSportsTwice, PDO::PARAM_STR);
                        $rocket->bindParam(':schoolid', $idSchool, PDO::PARAM_INT);
                        $rocket->execute();          
                        return $rocket->rowCount();
                }
        }

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 18:37
par mostelle
Merci pour le coup de main.
Ca marche toujours pas… int(0) C'est vraiment bizarre. Pourtant quand je tape la requête dans la console le résultat est bon. Il y a un problème avec PDO…

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 18:43
par Elie
Et si tu vires les bind ?
public function countPupilsBySport($idSchool,$sports){
                if (is_int($idSchool) && is_int($sports)) {
                        $sql = "SELECT COUNT(?) AS 'sport' FROM pupils WHERE ? != 0 AND school_id = ?";
                        $nbSports = 'sport'.$sports.'_id';
                        $nbSportsTwice = 'sport1_id';
                        $rocket = $this->dbh->prepare($sql);
                        $rocket->execute(array($nbSports, $nbSportsTwice, $idSchool));
                        $countPupilsBySport = $rocket->fetch(PDO::FETCH_ASSOC);
                        return $countPupilsBySport['sport'];
                }
        }
Et le ; a la fin de la requete ne fou pas la merde ?

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 19:50
par mostelle
Je l'avais levé le ';' . Effectivement il a rien à faire là mais le problème ne vient pas de là. Ta solution ne marche tout de même pas.
Je vais essayer de donner plus d'informations.
ma requête :
select count(sport1_id) from pupils where school_id=2 and sport1_id!=0;

J'ai plusieurs school_id (3 en tout) et j'ai une table pupils avec ID,school_id,sport1_id,sport2_id,sport3_id. Que de l'integer. Quand c'est 0 y'a pas de sportX_id. Si je remplace les zéros par NULL et mets IS NOT NULL à la place de !=0 ça ne marche toujours pas.
$sql = "SELECT COUNT(?) AS 'sport' FROM pupils WHERE sport1_id IS NOT NULL AND school_id = ?";
                        $nbSports = 'sport'.$sports.'_id';
                        $rocket = $this->dbh->prepare($sql);
                        $rocket->execute(array($nbSports, $idSchool));
                        $countPupilsBySport = $rocket->fetch(PDO::FETCH_ASSOC);
                        return $countPupilsBySport['sport'];
Ma requête effectuée dans la console marche très bien. Lorsque je fais dans PDO, ça marche. Mais il n'y a rien à faire il ne prends pas en compte le ' !=0 '.

Si je fais ça, ça marche ....
$sql = "SELECT COUNT(?) AS 'sport' FROM pupils WHERE sport1_id!=0 AND school_id = ?";
                        $nbSports = 'sport'.$sports.'_id';
                        $rocket = $this->dbh->prepare($sql);
                        $rocket->execute(array($nbSports, $idSchool));
                        $countPupilsBySport = $rocket->fetch(PDO::FETCH_ASSOC);
                        return $countPupilsBySport['sport'];
J'ai l'impression qi'on ne peut pas binder 2 fois la même valeur; au départ je m'étais vautré parce que j'avais mis la même référence, et avec bindParam on ne petu pas mettre deux fois la même :bindmeplease

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 20:02
par mostelle
et j'ai essayé en remplacant par count(id) et ça marche pas quand même

Re: PDO requête donnant un résultat = 0 !!!

Posté : 05 janv. 2015, 20:17
par mostelle
en faisant ça ça marche .....
$nbSports = 'sport'.$sports.'_id';
			$sql = "SELECT COUNT(id) AS 'sport' FROM pupils WHERE ".$nbSports ." !=0 AND school_id = ?";
                        $rocket = $this->dbh->prepare($sql);
                        $rocket->execute(array($idSchool));
                        $countPupilsBySport = $rocket->fetch(PDO::FETCH_ASSOC);
                        return $countPupilsBySport['sport'];

Re: PDO requête donnant un résultat = 0 !!!

Posté : 06 janv. 2015, 02:38
par AB
Bah oui les bind (quelque soit leur type nommés ou non) se font sur le nom des variables, mais pas sur le nom des colonnes.
Si tu veux faire des requêtes dynamiques en changeant le nom des colonnes il faut faire comme tu l'a fait dans ton précédent post. Enfin bon il faut être très prudent, et que personne d'autre que toi puisse définir "$sports", ou alors vérifier s'il fait partie d'une liste de possibilités autorisées.

Re: [RESOLU] PDO requête donnant un résultat = 0 !!!

Posté : 06 janv. 2015, 17:04
par mostelle
Ok, je te remercie.