Pb reuqete sql dans le php

Résolu
anthonyr_25 Messages postés 165 Date d'inscription   Statut Membre Dernière intervention   -  
anthonyr_25 Messages postés 165 Date d'inscription   Statut Membre Dernière intervention   -
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
peux-tu partager ton code?
1
anthonyr_25 Messages postés 165 Date d'inscription   Statut Membre Dernière intervention   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 165 Date d'inscription   Statut Membre Dernière intervention   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 165 Date d'inscription   Statut Membre Dernière intervention   6
 
tu as essayer sa marche chez toi ?
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > anthonyr_25 Messages postés 165 Date d'inscription   Statut Membre Dernière intervention  
 
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 165 Date d'inscription   Statut Membre Dernière intervention   6 > jordane45 Messages postés 38486 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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 165 Date d'inscription   Statut Membre Dernière intervention   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