Pb reuqete sql dans le php

Résolu
Bonjour,

J'ai un problème dans ma requète je ne voit pas ou..

Voila mon code :

function getCategory($category){
  $sql = 'SELECT * FROM categories WHERE category =:category';
  $datas = [':category'=>$category];
  return db_One($sql,$datas);
}

j'ai une erreur sur le return


A ma ligne 110 j'appele ma function ligne 52, je pense que sa vient peux être du " =: "

Configuration: Windows / Chrome 101.0.4951.67

2 réponses

  1. Contributeur
    bonjour,
    peux-tu partager ton code?
    1. Mon code php au complet

      <?php
      //affichage des erreurs PHP dans la page pour être sûr de ne rien laisser trainer...
      error_reporting(E_ALL);
      ini_set('display_errors', true);
      ini_set('display_startup_errors', true);
        
      //connexion à la BDD
      require_once 'bdd.php';
      
      /**----------------------------------------------------------
      * FONCTIONS UTILES POUR MANIPULER LA BDD
      *-----------------------------------------------------------*/
      
      //Fonction permettant d'exécuter des requêtes préparées
      function dbQuery($sql,$datas){
        global $bdd; 
        try{
          $prep = $bdd->prepare($sql);
          return $prep->execute($datas);
        }catch(PDOException $e){
          echo "Erreur : " . $e->getMessage();
        }
         
      }
      
      //permet de faire une requête SELECT et de retourner le premier jeu de résultat
      function db_One($sql,$datas=NULL){
        $res = dbQuery($sql,$datas);
        return  $res->fetch(); 
      }
      
      //permet de faire une requête SELECT et de retourner tous les résultats
      function db_All($sql,$datas=NULL){
        $res = dbQuery($sql,$datas);
        return  $res->fetchAll(); 
      }
      
      //Permet de faire une requête INSERT et de retourner l'id créé (si il est en auto-incrément bien entendu..)
      function db_Insert($sql,$datas=NULL){
        global $bdd;
        $res = dbQuery($sql,$datas);
        return  $bdd->lastInsertId();
      }
      
      
      /**----------------------------------------------------------
      * FONCTIONS pour gérer les catégories
      *-----------------------------------------------------------*/
      function getCategory($category){
        $sql = 'SELECT * FROM categories WHERE category =:category';
        $datas = [':category'=>$category];
        return db_One($sql,$datas);
      }
      
      function addCategory($category){
        $sql = "INSERT INTO categories(category) VALUES (:category)";
        $datas = [':category'=>$category];
        return db_Insert($sql,$datas); // retourne l'ID nouvellement créé ( à condition qu'il soit en auto-incrémenté)
      }
      
      function getSize($size){
        $sql = 'SELECT * FROM size WHERE value =:value';
        $datas = [':value'=>$size];
        return db_One($sql,$datas);
      }
      
      function addSize($size){
        $sql = "INSERT INTO size (value) VALUES (:value)";
        $datas = [':value'=>$size];
        return db_Insert($sql,$datas); // retourne l'ID nouvellement créé ( à condition qu'il soit en auto-incrémenté)
      }
      
      function getColor($color){
        $sql = 'SELECT * FROM colors WHERE color =:color';
        $datas = [':color'=>$color];
        return db_One($sql,$datas);
      }
      
      function addColor($color){
        $sql = "INSERT INTO colors(color) VALUES (:color)";
        $datas = [':color'=>$color];
        return db_Insert($sql,$datas); // retourne l'ID nouvellement créé ( à condition qu'il soit en auto-incrémenté)
      }
      
      function addProduct($product, $id_size, $id_cat, $id_color){
        $sql('INSERT INTO products(name, size_id, categories_id, colors_id) VALUES(?, ?, ?, ?)');
        $datas =array($product, $id_size, $id_cat, $id_color);
        return db_Insert($sql,$datas); // retourne l'ID nouvellement créé ( à condition qu'il soit en auto-incrémenté)  
      }
      
      // ------  DEBUT DU TRAITEMENT DU CSV ------------//
      $result = []; // pour stocker le résultat des insert de produit
      $row = 0;
      
      if (($handle = fopen("chaussures.csv", "r")) !== FALSE) {
        //on boucle sur le csv ..
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $row++;
            if($row == 1){
              continue;
            }
            
            //récupération des données dans le csv
            $product = !empty($data[0]) ? trim( $data[0] ) : NULL;
            $category = !empty($data[1]) ? trim( $data[1] ) : NULL;
            $size = !empty($data[2]) ? trim( $data[2] ) : NULL;
            $color = !empty($data[3]) ? trim( $data[3] ) : NULL;
            
            // On gère les catégories
            $db_category = getCategory($category);
            if(empty($db_category)){
              //on ajoute la catégorie et on récupère son ID
              $id_cat = addCategory($category); 
            }else{
              $id_cat = $db_category['id'];
            }
      
            $db_size = getSize($size);
            if(empty($db_size)){
              //on ajoute la catégorie et on récupère son ID
              $id_size = addSize($size); 
            }else{
              $id_size = $db_size['id'];
            }
      
            $db_color = getColor($color);
            if(empty($db_color)){
              //on ajoute la catégorie et on récupère son ID
              $id_color = addColor($color); 
            }else{
              $id_color = $db_color['id'];
            }
      
            $result[$product] = addProduct($product, $id_size, $id_cat, $id_color);
          
        }
        
        fclose($handle);
        
        var_dump($result);
      }
      
      ?>
      


      mon csv :


      mon workbench :
    2. Je pense que sa vient peux être de ma façon d'ajouter mes valeurs, peux être que le php ne comprend pas le "data=>color"...
    3. tu as essayer sa marche chez toi ?
    4. Modérateur
      @anthonyr_25Bonsoir,

      Ajoutes un peu de debug dans la fonction pour voir ce que ça donne
      //permet de faire une requête SELECT et de retourner le premier jeu de résultat
      function db_One($sql,$datas=NULL){
        $res = dbQuery($sql,$datas);
         var_dump(['sql'=>$sql,'datas'=>$datas,'res'=>$res]);
         return  $res->fetch(); 
      }
      
      


      et montres nous ce que ça te donne.

      Et puis.. pour qu'on puisse tester , il faudrait que tu nous donnes un DUMP sql ( un export) de ta base de données et un extrait de ton CSV ( mais en format TEXTE .. par en IMAGE pour qu'on puisse copier/coller )
    5. @jordane45je suis désoler je ne sais pas comment transmettre des fichiers sur CCM...

      voila ce que sa donne avec le var_dump
  2. Modérateur
    Ah.. c'est de ma faute.
    Voici le bon code
    //Fonction permettant d'exécuter des requêtes préparées
    function dbQuery($sql,$datas){
      global $bdd; 
      try{
        $prep = $bdd->prepare($sql);
        $prep->execute($datas);
        return $prep;
      }catch(PDOException $e){
        echo "Erreur : " . $e->getMessage();
      }
       
    }
    

    1. function addProduct($product, $id_size, $id_cat, $id_color){
        $sql = 'INSERT INTO products(name, size_id, categories_id, colors_id) VALUES(?, ?, ?, ?)';
        $datas =array($product, $id_size, $id_cat, $id_color);
        return db_Insert($sql,$datas); // retourne l'ID nouvellement créé ( à condition qu'il soit en auto-incrémenté)  
      }
      

      il y avais encore un autre petit bug à la ligne 87 il y avais une parenthèse au lieu d'un égal mais maintenant pour le coup c'est bon tout marche c'est magnifique !!

      Merci beaucoup