Comment accéder aux donnée retourner par PDO->query?

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 11:10

Salut,
J'utilise PHP5 et PDO pour la connexion à la base de donnée et l'éxécution des requêtes.
J'ai le code suivant après connexion à la base de ( qui ok):
$dbcon = new PDO ('mysql:host = '.CONST_CONNECT_SERVEUR_BD.';dbname = '.CONST_CONNECT_DB_NAME, CONST_CONNECT_DB_LOGIN,CONST_CONNECT_DB_PASSWORD);

$req = "SELECT profil FROM ".TABLE_USER.", ".TABLE_PROFIL." WHERE ".TABLE_USER.".identifiant = '$login' AND ".TABLE_USER.".mdp = SHA1('$pwd') AND ".TABLE_PROFIL.".id_profil = ".TABLE_USER.".id_profil";

//Exécution de la requête
				if($dbcon != NULL)
				{
					$data = $dbcon -> query($req) ;
				}
Quand je mets ceci pour récupérer des données je n'ai rien et ppourtant la requête a été bien éxécutée
$_SESSION[CONST_SESSION_DROIT] = $data[0]['profil'];
De plus si je met : $data ->fetch() ou $data ->fetchAll() il me dit que $data n'est pas un objet.

Que faire? Helpe please c'est urgent.
Cordialement

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 nov. 2007, 11:14

Modération :
simane, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

ViPHP
ViPHP | 4039 Messages

22 nov. 2007, 11:25

La magie du pdo c'est qu'il est tout de go exploitable comme un tableau..

Tu pourrais très bien faire ceci;
 if($dbcon != NULL)
                {
                    $data = $dbcon -> query($req) ;
                }
foreach ($data sa $row) {
  // des trucs;
}
Ou même..
 if($dbcon != NULL)
                {
                    foreach($dbcon -> query($req) as $row) {
                      // des trucs;
                   }
                }
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 11:39

D'accord Mr Truc c'est noté.

Mr Berzemus si je mets ceci
foreach ($data sa $row) {
  // des trucs;
}
Je recois cet avertissement et aucune donnée n'est récupérée:

Code : Tout sélectionner

Warning: Invalid argument supplied for foreach() in C:\wamp\www\sms_admin_interface_v2\classes\verification.php on line 57

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 nov. 2007, 11:59

il y a une erreur de syntaxe ...

c'est "as" et pas "sa" ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 12:12

oui c "as" que j'ai mis mais ça ne marche pas.

Je précise que j'utilise WAMP 5.1.7.3 (WAMP = Windows Apache Mysql Php 5)

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 12:20

J'ai essayé aussi ceci
if($dbcon != NULL)
{
	$data = $dbcon -> query($req) ;
}
Après éxécution je fais ceci
while($row = $data->fetch(PDO::FETCH_ASSOC))
{
    //code de traitement
}
Mais il me renvoie cette erreur

Code : Tout sélectionner

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\sms_admin_interface_v2\classes\verification.php on line 59

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 nov. 2007, 13:28

est-ce que $dbcon contient bien une instance connectée de PDO ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 4039 Messages

22 nov. 2007, 13:47

C'est ce je dirais. Si le résultat n'est pas valide pour foreach, c'est que le résultat n'est pas un tableau, et que la requêt à échoué.

Ceci:
if ($dbcon -> query($req)) { 
			foreach( $dbcon -> query($req) as $row) {
				print_r ($row);
			}
} else {
  echo "ah ben non ça marche pas !!";
}
(y'a moyen de récuperer les exceptions sinon)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 14:25

Voici ma fonction
public function verifierMotDePasse($tableau, $login, $pwd)
		{
				//déclaration
				$data = array();
				$dbcon;
				//Connexion à la base de données
				//$dbcon = ConnectDateBase();	
				try
				{
					$dbcon = new PDO ('mysql:host = '.CONST_CONNECT_SERVEUR_BD.';dbname = '.CONST_CONNECT_DB_NAME, CONST_CONNECT_DB_LOGIN,CONST_CONNECT_DB_PASSWORD);
					echo "Connexion réussie<br/>";
				}
				catch(PDOException $e)
				{
					//$db	 = NULL;
					print "Erreur de connxion à la base de donnée!: " .CONST_CONNECT_DB_NAME." -- ". $e->		getMessage() . "<br/>";
					die();
				}
		
				//Construction de la requête
				
				$req = "SELECT profil FROM user_profil ";
				
				//Exécution de la requête
				if($dbcon)
				{
					if ($dbcon->query($req)) 
					{ 
								foreach( $dbcon -> query($req) as $row) 
								{
									print_r ($row);
								}
					} 
					else 
					{
					  echo "ah ben non ça marche pas !!";
					} 
				}
}//fin fonction verifierMotDePasse()
Quand j'éxécute il me retourne le message

Code : Tout sélectionner

ah ben non ça marche pas !!"
comme me l'avais suggéré Berzemus. Il me semble que ma requête n'est pas éxécutée. Alors que si je l'éxécute sur phpMyAdmin j'ai un résultat

Eléphanteau du PHP | 19 Messages

22 nov. 2007, 19:04

Salut,
J'ai toujours des soucis avec PDO. J'ai même changé de version de WAMP( c'est WAMP2.0) que j'utilise maintenant.
Mais je ne parviens toujours pas à éxécuter des requêtes sur ma base de données. La connexion est OK.
Vous le code que j'éxécute
try
		{
			$db = new PDO (CONST_CONNECT_DSN, CONST_CONNECT_DB_LOGIN,CONST_CONNECT_DB_PASSWORD);
			
			$stmt = $db->query('SELECT * FROM user_profil');
		   	echo "Connexion réussie<br/>";
		}
		catch(PDOException $e)
		{
			print "Erreur de connxion à la base de donnée  !:
			 " .CONST_CONNECT_DB_NAME." -- ". $e->		getMessage() . "<br/>";
   			die();
		}

Code : Tout sélectionner

HELP PLEASE

ViPHP
ViPHP | 4039 Messages

23 nov. 2007, 11:12

Et si tu changais toutes les constantes par leurs valeurs originales, pour essayer de démarrer sur du moins abstrait..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Invité
Invité n'ayant pas de compte PHPfrance

23 nov. 2007, 11:34

Salut,
J'ai essayé de mettre directement les paramètres de connexion lors de l'instantiation de PDO mais ça ne change rien.

Code : Tout sélectionner

Est ce que y a des configuration à faire pour PDO?
Cordialement

ViPHP
ViPHP | 4039 Messages

23 nov. 2007, 11:57

hmm.. vu que ça va, tu dois avoir activé tous les modules nécessaires..

Y'a bien un paramètre PDO::MYSQL_ATTR_DIRECT_QUERY propre à Mysql, je sais pas si c'est une piste. (petit lien)..

Et si tu essayais une simple insertion par exec() (petit lien)..

je serais d'avis de tester le plus simple possible, quite à repartir de zéro dans un petit script de test (c'est parfois un peu chiant à faire, mais souvent ça permet de gagner du temps)
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Mammouth du PHP | 2937 Messages

23 nov. 2007, 13:25

Pour retourner le résultat de la méthode query () :
try
{
  $pdo = new PDO ('mysql:host = localhost;dbname = ta_base', 'root', 'mdp');
}
catch (PDOException $e)
{
  echo $e -> getMessage();
  die();
}
$sql = "SELECT profil FROM user_profil ";
$requete = $pdo -> query ($sql);
$resultat = $requete -> fetchAll ();

// Aucun résultat
if (empty ($resultat)) echo 'Aucun résultat retourné';

// Sinon
else
{
  foreach ($resultat as $valeur)
  {
    echo $valeur['profil']."\n";
  }
}
Une question : ta fonction se trouve-t-elle dans une classe ? Si c'est le cas, il vaudrait mieux sortir du cadre de la classe, à moins de déclarer ta classe comme suit (mais, je ne suis pas sûr du résultat) :
class TaClass extends PDO