[PHP] Problème de PDO fetch vide
Résolu
Ninja_En_Short
Messages postés
133
Date d'inscription
Statut
Membre
Dernière intervention
-
Autumn`Tears Messages postés 1054 Date d'inscription Statut Membre Dernière intervention -
Autumn`Tears Messages postés 1054 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'écris car j'ai un soucis avec une fonction de BDD en requete préparée fonctionnant de la façon suivante : je lui passe une requête en string (paramètres en "?") plus un tableau de valeurs à utiliser.
Cette fonction marche très bien pour la récupération des chemins de templates de mon petit CMS maison qui sont stockés en BDD, ça marche aussi sans problème pour récupérer le texte des sections de page.
Je pense avoir remarqué que quand la requête préparée a une seule variable ça fonctionne sans problème (pour les pages par exemple la requête est du type "SELECT content FROM pages WHERE id_page = ?" et il n'y a que l'id de la page à passer) mais dès qu'il y en a plusieurs je n'obtient aucun résultat (la fonction get_data renvoie un tableau vide).
Fonction get_data :
Et donc cette fichue fonction refuse obstinément de renvoyer le moindre résultat aux ligne de la fonction de login :
$query = 'SELECT * FROM users WHERE username = ? AND md5_password = ?';
$data = $bdd_connexion->get_data($query, array($username, $mdp));
Fonction de login :
Je patauge depuis ce matin (j'ai quand même corriger une poignée de bugs) et j'ai donc besoin d'aide pour savoir pourquoi ça ne veux pas marcher quand je mets plus d'une variable dans les requêtes.
J'écris car j'ai un soucis avec une fonction de BDD en requete préparée fonctionnant de la façon suivante : je lui passe une requête en string (paramètres en "?") plus un tableau de valeurs à utiliser.
Cette fonction marche très bien pour la récupération des chemins de templates de mon petit CMS maison qui sont stockés en BDD, ça marche aussi sans problème pour récupérer le texte des sections de page.
Je pense avoir remarqué que quand la requête préparée a une seule variable ça fonctionne sans problème (pour les pages par exemple la requête est du type "SELECT content FROM pages WHERE id_page = ?" et il n'y a que l'id de la page à passer) mais dès qu'il y en a plusieurs je n'obtient aucun résultat (la fonction get_data renvoie un tableau vide).
Fonction get_data :
function get_data ($query, $array="") { if (isset($query) && $query != "" && $array == "") { try { $bdd_connexion = new PDO("mysql:host=$this->bdd_host; dbname=$this->bdd_name", $this->bdd_user, $this->bdd_mdp); try { $response = $bdd_connexion->query($query); $data = $response->fetch(); $response->closeCursor(); $bdd_connexion = NULL; return $data; } catch (Exception $e) { $bdd_connexion = NULL; die('Error : '.$e->getMessage()); } } catch (Exception $e) { die('Error : '.$e->getMessage()); } } elseif (isset($query) && $query != "" && $array != "") { // echo 'Fonction de requete preparee <br/>'; $bdd_connexion = new PDO("mysql:host=$this->bdd_host; dbname=$this->bdd_name", $this->bdd_user, $this->bdd_mdp); try { $query = $bdd_connexion->prepare($query); $query->execute($array); $data = $query->fetch(PDO::FETCH_ASSOC); $bdd_connexion = NULL; // foreach ($data AS $value) // { // echo $value.'<br/>'; // } return $data; } catch (Exception $e) { $bdd_connexion = NULL; die('Error : '.$e->getMessage()); } } else { die('Requete ou tableau de parametres manquants <br/>'); } }
Et donc cette fichue fonction refuse obstinément de renvoyer le moindre résultat aux ligne de la fonction de login :
$query = 'SELECT * FROM users WHERE username = ? AND md5_password = ?';
$data = $bdd_connexion->get_data($query, array($username, $mdp));
Fonction de login :
function login ($username = NULL, $mdp = NULL) { if (isset($username, $mdp) && $username != '' && $mdp != '') { echo $username.'<br/>'; echo $mdp.'<br/>'; $md5_mdp = md5($mdp); echo $md5_mdp.'<br/>'; $bdd_connexion = new Bdd (); $query = 'SELECT * FROM users WHERE username = ? AND md5_password = ?'; $data = $bdd_connexion->get_data($query, array($username, $mdp)); $i = 0; foreach($data['id_user'] AS $value) { $i++; } echo $i; echo $data['id_user'].'<br/>'; echo $data['first_name'].'<br/>'; echo $data['last_name'].'<br/>'; echo $data['username'].'<br/>'; echo $data['mail'].'<br/>'; echo $data['role'].'<br/>'; echo $data['user_sequence'].'<br/>'; echo $data['user_status'].'<br/>'; $bdd_connexion = NULL; if(0 < $i && $i < 2) { echo 'Setting de l\'utilisateur <br/>'; $user = new User(); $sequence = ''; if ($data['role'] < 3) { // Génération de séquence de sécurité type contrôle $sequence = $this->generate_sequence($data['id_user'], 1); } set_user_spec( $data['id_user'], $data['first_name'], $data['last_name'], $data['username'], $data['mail'], $data['role'], $data['user_sequence'], $data['user_status'] ); $this->log_state = 1; $_SESSION['log_state'] = 1; } elseif($i >= 2) { echo ('Comptes multiples'); } elseif($i == 0) { echo ('Compte inexistant'); } } elseif (!isset($username) or $username == '') { echo 'Username requis. <br/>'; return 0; } elseif (!isset($mdp) or $mdp == '') { echo 'Mot de passe requis. <br/>'; return 0; } else { echo 'Username et mot de passe requis. <br/>'; return 0; } }
Je patauge depuis ce matin (j'ai quand même corriger une poignée de bugs) et j'ai donc besoin d'aide pour savoir pourquoi ça ne veux pas marcher quand je mets plus d'une variable dans les requêtes.
A voir également:
- [PHP] Problème de PDO fetch vide
- Supprimer page word vide - Guide
- Caractere vide - Guide
- Coeur vide - Forum Facebook
- Easy php - Télécharger - Divers Web & Internet
- Formate pour taxer client frigo vide - Forum Vos droits sur internet