Partage
  • Partager sur Facebook
  • Partager sur Twitter

function prepare() on nul order by day

Sujet résolu
    21 avril 2021 à 17:30:20

    bonjour

    j'ai une erreur prepare nul mais je ne sais pas ou est mon erreur.

      if (!empty($type)){
    $typban = 'idban'.$type;
    }
    echo $typban;
      	$recbanni = $bdd->prepare("SELECT
    	SUM(nbclic) AS clic_total,	
    	DATE_FORMAT( dateclic, '%d') AS datej 
    	FROM rc_enrclic WHERE $typban = :id AND YEAR( dateclic) = :datan AND MONTH( dateclic) = :datmoi GROUP BY $typban ORDER BY DAY( dateclic) ASC");
    	$recbanni->execute(array(
    	'id'=> $id,
    	'datan'=> date("Y"),
    	'datmoi'=> date("m")
        ));
    
     if ($recbanie = $recbanni->fetch()) {
    $clic = array();
    for ($j=0; $j <=31; $j++){
    	$clic[] = 0;
    }
    foreach ($recbanie AS $recbani)
      {
    	  $jouclic = $recbani['datej'];
      $clic[$jouclic] = $recbani['clic_total'];
    
      }
      } 

    tous les variables sont définie est ne sont pas null.

    avec idban300 = 6



    -
    Edité par maxtrident 21 avril 2021 à 22:09:57

    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2021 à 19:38:58

      Bonjour,

      Première chose : activer l'affichage des erreurs PDO ...

      Cela t'évitera d'avoir une bête erreur PHP inexploitable...

      Deuxième chose : éviter de nommer une colonne DATE qui est un mot clé SQL et peux créer des ambiguïtés...

      Troisième chose, et sûrement explication de l'erreur : tu utilises SUM() sans clause GROUP BY ... Pas glop, faut revoir ton cours SQL sur les regroupements.

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        21 avril 2021 à 22:16:35

        j'ai modifier mon code voir plus haut et toujours pareille.

        pour affichage des erreurs PDO j'ai mis:

        try
        {
            // On se connecte à MySQL
           $bdd = new PDO('mysql:host='.$sql.';dbname='.$base.';charset=utf8mb4', $user, $password);
         $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
         $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch(PDOException $e) {
            die('Erreur : ' . $e->getMessage());
        }

        par contre mon code en haut est dans une fonction donc obligé d’ajouter  global $bdd;

        je ne sais pas si c'est pour ça que je ne vois pas les erreurs.

        -
        Edité par maxtrident 21 avril 2021 à 22:16:54

        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2021 à 22:59:36

          L'erreur exacte et complète ?

          Parce que là on ne sait pas si elle vient de PHP ou de SQL (je dirais la première, que $bdd n'est pas défini/vaut NULL)

          EDIT : enfin, comme le premier message a été édité entre temps, je suppose qu'initialement, question de portée liée à l'usage d'une fonction, il y avait une Call to a member function prepare() on null que tu as "résolu" par ce global $bdd et que maintenant ça n'a plus rien à voir (simple erreur SQL ?)

          > je ne sais pas si c'est pour ça que je ne vois pas les erreurs

          Il faut voir comment tout est vraiment goupillé mais avec le code ci-dessus elles devraient l'être.

          Idem : le screen montre une colonne nommée date mais le code, dateclic donc on ne sait plus où on en est ...

          Tu as testé ta requête dans PMA ?

          -
          Edité par julp 21 avril 2021 à 23:06:44

          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2021 à 9:01:40

            Pour l'erreur SQL je corrigerai ainsi (le GROUP BY) :

            $recbanni = $bdd->prepare("
            	SELECT
            		SUM( nbclic ) AS clic_total, 
            		DAY( dateclic ) AS datej
            	FROM rc_enrclic
            	WHERE
            		$typban = :id
            		AND YEAR( dateclic) = :datan
            		AND MONTH( dateclic) = :datmoi
            	GROUP BY DAY( dateclic )
            	ORDER BY DAY( dateclic ) ASC"
            );

            -
            Edité par Benzouye 22 avril 2021 à 9:02:46

            • Partager sur Facebook
            • Partager sur Twitter
            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
              22 avril 2021 à 10:15:11

              j'ai trouvé pourquoi ça ne fonctionné pas...je testé la fonction directement dans le répertoire sans passer dans un include, donc forcément il y a avait pas de bdd pffffff
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2021 à 10:53:19

                Attention ta requête SQL n'était pas bonne non plus ...

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  22 avril 2021 à 11:32:02

                  oui j'ai modifié...merci
                  • Partager sur Facebook
                  • Partager sur Twitter

                  function prepare() on nul order by day

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown