[PHP] Problème de PDO fetch vide
Résolu
Ninja_En_Short
Messages postés
136
Statut
Membre
-
Autumn`Tears Messages postés 1247 Statut Membre -
Autumn`Tears Messages postés 1247 Statut Membre -
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
- Formate pour taxer client frigo vide ✓ - Forum Matériel & Système
- Coeur vide - Forum Facebook
- Taxe foncière pour locataire - Forum Vos droits sur internet