8791 sujets

Développement web côté serveur, CMS

Bonjour,

Mon problème est exactement le même que ce vieux sujet (résolu)…

… Sauf que j'ai beau vérifier et revérifier, chez moi ça ne marche pas.

Impossible d'afficher le total d'une colonne d'après une requête SELECT SUM : ça reste désespérément vide !

Pour me situer :
Je suis débutant en développement PHP MySQL et j'ai décidé, pour me faire la main, de développer de A à Z une première application relativement simple : un livre de dépenses/recettes.

Smiley smile Il ne m'aura fallu qu'une journée pour développer l'ensemble de l'application…
Smiley bawling … plus une journée entière à buter sur ce problème qui parait pourtant incroyablement simple !

C'est donc en désespoir de cause que je m'adresse à vous. J'ai probablement fait une erreur grossière… mais où ? Merci d'avance pour votre aide…

Voici où j'en suis :


<?php

// Requete
$req = $bdd->query("SELECT SUM(opeMontant) AS total_operations FROM operations") or die('Erreur SQL '.mysql_error()); // La requete est testée dans PHPmyAdmin et renvoie bien un résultat correct

// Affichage : 
// j'ai testé absolument tout ce que j'ai trouvé sur le web 
// (une journée entière rien que là dessus et là je craque !)
// mon $total reste desesperement vide

$data = mysql_fetch_assoc($req);
$total = $data['total_operations'];
echo "Total : " . $total;

?>



Au cas où, voici le code complet de la page de tests.



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr" >

<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title>TEST</title>
</head>
<body>


<?php
// connexion a la dase de donnee
try
{
	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
	$bdd = new PDO('mysql:host=localhost;dbname=NicoComptes1D', 'root', 'root', $pdo_options);
}
catch (Exception $e)
{
        die('<p class="alert">Erreur ' . $e->getMessage() . '</p>');
}
?>

<h2>Essai total</h2>


<?php

// Requete
$req = $bdd->query("SELECT SUM(opeMontant) AS total_operations FROM operations") or die('Erreur SQL '.mysql_error()); // La requete est testée dans PHPmyAdmin et renvoie bien un résultat correct

// Affichage : 
// j'ai testé absolument tout ce que j'ai trouvé sur le web 
// (une journée entière rien que là dessus et là je craque !)
// mon $total reste desesperement vide

$data = mysql_fetch_assoc($req);
$total = $data['total_operations'];
echo "Total : " . $total;

?>


Modifié par Niconemo (17 Apr 2012 - 18:28)
Fais un var_dump() de ta variable $data et tu vas comprendre.
La fonction mysql_fetch_assoc() retourne un tableau de résultats. Certe dans ton cas ce tableau ne contient qu'un seul résultat, mais ça reste un tableau.

Autrement dit, il faut que tu fasse quelque chose comme ça :

$data = mysql_fetch_assoc($req);
$total = $data[0]['total_operations'];

ou encore :

$total = mysql_result($req, 0, 'total_operations');
Merci de ta réponse.

J'ai testé mais ça ne retourne rien du tout non plus.

Par contre on me dit par ailleurs que je mélange une connexion PDO avec des fonctions de l'API mysql_
Je n'avais pas saisi l'incidence du mode de connexion à la base de donnée MySQL sur le langage de programmation Smiley sweatdrop .

Apparemment PDO, c'est l'avenir et mysql_ le passé… sauf que pour avoir de l'aide, on ne trouve que des choses utilisant des fonctions mysql_

Bref, je suis perplexe Smiley confus
Je pense que je vais essayer de persister avec PDO…

La solution du problème (qui venait donc bien de là) :

$data = $req->fetch(); 
$total = $data['total_operations'];
echo "Total : " . $total;
Ha oui effectivement, je n'avais pas fais attention à ça.
Tu ne peux en effet pas mélanger PDO et les fonctions mysql_* pour la raison simple dans ton cas que PDO::query() retourne un objet PDOStatement alors que mysql_query() retourne une ressource mysql. Deux types de données que tu ne peux pas manipuler de la même façon.
D'ailleurs dans ton code tu passes un objet PDOStatement à mysql_fetch_assoc() qui attend une ressource mysql, ce qui doit générer un erreur PHP qui aurait du t'alerter (si tu n'as pas désactivé l'affichage des erreurs PHP).

Pour ce qui est de trouver de la documentation sur PDO, le mieux reste de te tourner vers la doc officiel qui est très riche : http://php.net/manual/fr/book.pdo.php

Quand à Google on y trouve bon nombre de tutoriel et autres sujet traitant de l'usage de PDO si tu cherches bien.
a écrit :
on y trouve bon nombre de tutoriel et autres sujet traitant de l'usage de PDO si tu cherches bien


Et quand on sait quoi chercher ça va tout de suite mieux. Smiley smile

Merci pour tes conseils en tout cas.