Pb reuqete sql dans le php

Résolu/Fermé
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 - Modifié le 26 mai 2022 à 16:16
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 - 27 mai 2022 à 11:06
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 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
26 mai 2022 à 16:22
bonjour,
peux-tu partager ton code?
1
anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
26 mai 2022 à 16:30
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 mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
26 mai 2022 à 18:00
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 mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
26 mai 2022 à 20:50
tu as essayer sa marche chez toi ?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > anthonyr_25 Messages postés 165 Date d'inscription mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022
26 mai 2022 à 21:36
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 mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
26 mai 2022 à 21:44
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 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
26 mai 2022 à 22:32
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 mercredi 5 janvier 2022 Statut Membre Dernière intervention 6 juillet 2022 6
Modifié le 27 mai 2022 à 11:14
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