[PHP] Problème de PDO fetch vide

Résolu/Fermé
Ninja_En_Short Messages postés 133 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 27 juin 2014 - 1 août 2012 à 21:17
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 - 2 août 2012 à 21:48
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 :

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:

2 réponses

Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
2 août 2012 à 09:49
Salut,

Est-ce que ça ne viendrait pas d'ici :

$data = $bdd_connexion->get_data($query, array($username, $md5_mdp));
1
Ninja_En_Short Messages postés 133 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 27 juin 2014 9
2 août 2012 à 15:56
Bon ba ça marche et je me sens vraiment très très très con... retour à l'oreiller !
0
Autumn`Tears Messages postés 1054 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 23 octobre 2013 145
2 août 2012 à 21:48
Ça arrive, t'en fais pas ! ;)
0