8721 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

Je souhaite additionner les valeurs contenues dans le champ answered et utilise le code suivant:
$SQL=$pdo->query("SELECT SUM(`answered`) as total FROM `$idLevel` WHERE answered >29");
$data = $SQL->fetch();
$sommeanswered = $data['total'];


echo "Table ".$idLevel;
echo "Total : ". var_dump($data['total']);


L'affichage de la variable $idLevel est bon.
Par contre, j'obtiens "null" pour le var_dump.... Smiley decu

Pouvez-vous me dire l'erreur que je fais ?
Merci d'avance.
Bonjour.

Et en faisant :
echo "Total : ". $data['total'];

?

var_dump() est utilisé pour le déboggage, il a son programme intégré d'affichage des variables et n'est fait pas pour l'utilisation des variables.

Edit : mais pourquoi ne pas utiliser $sommeanswered puisque vous l'avez créé ?
Modifié par Zelena (27 Aug 2017 - 14:01)
Bonjour Zelena et merci pour votre post.

Si je fais
echo "Total : ". $data['total'];
, rien ne s'affiche après"Total :"
Pourquoi n'ai-je pas utilisé $sommeanswered ? C'est ce que je faisais précédemment mais c'est pour être bien sûr que quelque chose cloche dans $data['total'].
Bonsoir.

$SQL=$pdo->query("SELECT SUM(`answered`) as total FROM `$idLevel` WHERE answered >29");


Ok. (J'avais pas bien vu.)

La première chose à faire est de vérifier que la connexion s'est bien effectuée.

Après… avec une variable, on ne fait pas comme ça. Mais comme dans cette page :
https://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/lire-des-donnees-2#/id/r-2175368

(Il y aussi une autre façon mais comme ça, c'est bien.)

Smiley smile
Encore merci Zelena pour ton intervention.

Concernant la connexion, pas de soucis Smiley cligne , ça fonctionne bien.
Par contre, je ne comprends pas ton lien, ne voyant pas de rapport avec la sommation. Peux-tu me mettre sur la voie ?
Bonjour à tous (et à toutes) et merci Zelena pour cette précision.

Si je comprends bien, je modifie ainsi :
	$req = $bdd->prepare('SELECT SUM(`answered`) as total FROM ? WHERE answered >29');
	$req->execute(array($idLevel));


J'obtiens cette fois l'erreur suivante:
Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''18' WHERE answered >29' à la ligne 1' in ...


Je précise que la valeur obtenue de 18 est la bonne et que la ligne marquée comme étant fautive est la seconde.
Une autre idée ?
Modifié par tintin88 (28 Aug 2017 - 08:22)
Bonjour.

Si il y a une erreur dans la requête, la faute va être visible dans l'exécution…

Je ne comprends pas bien : dans $idLevel, il y a le nom de la table ? Et ce nom, c'est un nombre ? Smiley sweatdrop

Je n'avais jamais essayé mais apparemment on ne peut pas utiliser de variables pour les noms de tables dans les requêtes préparées :
https://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-or-column-name-as-parameter

Mais c'est $idLevel est vraiment une table ? (drôle de nom…) Smiley sweatdrop
Re-bonjour Zelena,

En effet, $idLevel est la variable qui contient le nom de la table concernée, ici c'est la table 18 Smiley cligne
Modifié par tintin88 (28 Aug 2017 - 10:29)
Zelena à raison.

Tu ne peux pas binder la table, mais tu peux l'insérer en concaténant.


"SELECT SUM(`answered`) as total FROM ".$idLevel." WHERE answered >29"

Modifié par JENCAL (28 Aug 2017 - 10:27)
Merci Jencal, mais où y a t'il des guillemets superflus dans
SELECT SUM(`answered`) as total FROM ".$idLevel." WHERE answered >29
?
Modifié par tintin88 (28 Aug 2017 - 11:04)
SELECT SUM(`answered`) as total FROM ".$idLevel." WHERE answered >29


SELECT SUM(answered) as total FROM ".$idLevel." WHERE answered >29
Dans ta variable directement,

l'erreur te dit : 1064 Erreur de syntaxe près de ''18' WHERE answered >29' (j'ai mis en rouge)
Modifié par JENCAL (28 Aug 2017 - 11:10)
Tintin75,

Merci mais
SELECT SUM(answered) as total FROM ".$idLevel." WHERE answered >29
ne change rien.
Pages :