Pb reuqete sql dans le php

Résolu
anthonyr_25 Messages postés 172 Statut Membre -  
anthonyr_25 Messages postés 172 Statut Membre -
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
A voir également:

2 réponses

yg_be Messages postés 24281 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 585
 
bonjour,
peux-tu partager ton code?
1
anthonyr_25 Messages postés 172 Statut Membre 6
 
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 :
0
anthonyr_25 Messages postés 172 Statut Membre 6
 
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"...
0
anthonyr_25 Messages postés 172 Statut Membre 6
 
tu as essayer sa marche chez toi ?
0
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 759 > anthonyr_25 Messages postés 172 Statut Membre
 
Bonsoir,

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 )
1
anthonyr_25 Messages postés 172 Statut Membre 6 > jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention  
 
je suis désoler je ne sais pas comment transmettre des fichiers sur CCM...

voila ce que sa donne avec le var_dump
0
jordane45 Messages postés 40050 Date d'inscription   Statut Modérateur Dernière intervention   4 759
 
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
anthonyr_25 Messages postés 172 Statut Membre 6
 
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
0