Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2011, 14h03   #1
Membre du Club
 
Homme
Étudiant
Inscription : août 2010
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : août 2010
Messages : 83
Points : 58
Points : 58
Par défaut Erreur avec requêtes SQL préparée.

Bonjour,
Je rencontre un probème dans la récupération de données depuis une base MySQL.
Mes reqêtes sont valides et testées.
J'ai voulu récupérer mes données avec des requêtes préparées mais je rencontre l'erreur suivante :

Code :
Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\tut\GoldEtFrey\classes\DAO.php on line 99
EN revanche, je ne rencontre aucun problème avec une requête non préparée.

Voici le code de la fonction de récupération en question :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
	public function getAllSequences($taille, $ensemble)
	{
		if(is_numeric($ensemble) && is_numeric($taille))
		{
			$requete=$this->db->prepare("SELECT suite, teta, taille, ensemble FROM SUITES s 
										INNER JOIN ENSEMBLE e ON s.id_ensemble=e.id_ensemble
										INNER JOIN TAILLE t ON t.id_taille=s.id_taille
										GROUP BY e.ensemble, t.taille
										HAVING t.taille=:taille AND e.ensemble=:ensemble;");
 
			$requete->bindValue(':taille',$taille);	
			$requete->bindValue(':ensemble',$ensemble);
			$resultat=$requete->execute();
 
			/*$requete='SELECT suite, teta, taille, ensemble FROM SUITES s 
										INNER JOIN ENSEMBLE e ON s.id_ensemble=e.id_ensemble
										INNER JOIN TAILLE t ON t.id_taille=s.id_taille
										GROUP BY e.ensemble, t.taille
										HAVING t.taille='.$taille.' AND e.ensemble='.$ensemble.';';
			echo $requete;
			$resultat=$this->db->query($requete);*/
 
 
			if($resultat)
			{
				$retour=array();
				while ($ligne=$resultat->fetch())
				{
					$retour[]=$ligne;
				}
				return $retour;
			}
			else
			{
				throw new Exception("Erreur lors de la récupération des suites dans getAllSequences()");
			}
		}
		else
		{
			throw new Exception("Les paramètres passés ne sont pas numériques dans getAllSequences()");
		}
Si quelqu'un à une réponse, elle est la bienvenue.
Merci
Alpha573 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 14h16   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ta requête ne fonctionne pas.
Affiche les erreurs PDO.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/01/2011, 14h33   #3
Membre du Club
 
Homme
Étudiant
Inscription : août 2010
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : août 2010
Messages : 83
Points : 58
Points : 58
Je suis désolé, je suis débutant en PHP.
Comment je dois afficher les erreurs du PDO ? J'ai fais une petite classe MyPDO qui hérite du PDO et je l'ai incluse dans mon DAO.
Merci.
Alpha573 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 14h39   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Alpha573 Voir le message
Comment je dois afficher les erreurs du PDO ?.
en faisant un petit tour sur la doc :
http://php.net/manual/fr/pdo.error-handling.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/01/2011, 14h56   #5
Membre du Club
 
Homme
Étudiant
Inscription : août 2010
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : août 2010
Messages : 83
Points : 58
Points : 58
Merci.
J'ai activer la génération des erreurs avec les paramètres :
Code :
PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING
Mais quand je ré-exécute ma page, je n'ai pas d'autres erreurs.
Alpha573 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 14h59   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par Alpha573 Voir le message
Merci.
J'ai activer la génération des erreurs avec les paramètres :
Code :
PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING
Mais quand je ré-exécute ma page, je n'ai pas d'autres erreurs.
fait au début de ton script
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 15/01/2011, 15h13   #7
Membre du Club
 
Homme
Étudiant
Inscription : août 2010
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : août 2010
Messages : 83
Points : 58
Points : 58
Merci.
J'ai fais ce vous avez dit pour les erreurs, mais je n'ai rien de reporter.
Que faire ?
Alpha573 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 15h23   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
La méthode execute retourne un booléen, l'objet PDOStatement vous l'avez lors du prepare.

Code :
return $requete->fetchAll(/*mode*/);
Suffit à :
Code :
1
2
3
4
5
6
$retour=array();
while ($ligne=$requete->fetch())
{
	$retour[]=$ligne;
}
return $retour;
Vous avez visiblement repris la "logique" d'une requête non-préparée (partie commentée), qui est différente.

--

Il y aurait une erreur sur la requête préparée, il levait tout de même de lui-même une exception (bien que c'est réécrire ce que fait déjà PDO).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/01/2011, 16h38   #9
Membre du Club
 
Homme
Étudiant
Inscription : août 2010
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Haute Vienne (Limousin)

Informations professionnelles :
Activité : Étudiant
Secteur : Service public

Informations forums :
Inscription : août 2010
Messages : 83
Points : 58
Points : 58
Merci beaucoup, problème résolu !
Alpha573 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h43.


 
 
 
 
Partenaires

Hébergement Web