[PHP] Problème de PDO fetch vide [Résolu/Fermé]

Signaler
Messages postés
134
Date d'inscription
mercredi 19 septembre 2007
Statut
Membre
Dernière intervention
27 juin 2014
-
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
-
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.

2 réponses

Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
144
Salut,

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

$data = $bdd_connexion->get_data($query, array($username, $md5_mdp));
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
134
Date d'inscription
mercredi 19 septembre 2007
Statut
Membre
Dernière intervention
27 juin 2014
8
Bon ba ça marche et je me sens vraiment très très très con... retour à l'oreiller !
Messages postés
1054
Date d'inscription
samedi 14 mars 2009
Statut
Membre
Dernière intervention
23 octobre 2013
144
Ça arrive, t'en fais pas ! ;)