Page 1 sur 3
Comment accéder aux donnée retourner par PDO->query?
Posté : 22 nov. 2007, 11:10
par simane
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
Posté : 22 nov. 2007, 11:14
par Truc
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
Posté : 22 nov. 2007, 11:25
par Berzemus
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;
}
}
Posté : 22 nov. 2007, 11:39
par simane
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
Posté : 22 nov. 2007, 11:59
par zeus
il y a une erreur de syntaxe ...
c'est "as" et pas "sa"

Posté : 22 nov. 2007, 12:12
par simane
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)
Posté : 22 nov. 2007, 12:20
par simane
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
Posté : 22 nov. 2007, 13:28
par zeus
est-ce que $dbcon contient bien une instance connectée de PDO ?
Posté : 22 nov. 2007, 13:47
par Berzemus
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)
Posté : 22 nov. 2007, 14:25
par simane
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
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
Posté : 22 nov. 2007, 19:04
par simane
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();
}
Posté : 23 nov. 2007, 11:12
par Berzemus
Et si tu changais toutes les constantes par leurs valeurs originales, pour essayer de démarrer sur du moins abstrait..
Posté : 23 nov. 2007, 11:34
par Invité
Salut,
J'ai essayé de mettre directement les paramètres de connexion lors de l'instantiation de PDO mais ça ne change rien.
Cordialement
Posté : 23 nov. 2007, 11:57
par Berzemus
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)
Posté : 23 nov. 2007, 13:25
par Victor BRITO
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