Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 08/09/2011, 21h50   #1
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
Par défaut Problème d'allocation de mémoire: Fatal error: Allowed memory

Bonsoir à tous,

Je me retrouve actuellement face à un problème que je ne comprends guère ^^.
Apparemment il y a des problèmes de mémoire dans mon code ... (Au passage, j'ai essayé d'augmenter la taille de la mémoire du php.ini, et cela n'a rien changé ! ^^).

Donc je dois certainement coder salement, et si c'est le cas, pouvez-vous m'informer de ce qui ne va pas ? =).

Voici le code (enfin la partie qui rate):

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
	public function searchAndDisplay($ingredients){
 
	    $result = array();
 
	    $listeIngredients = explode('-', $ingredients);
 
	    $nbrIngredients = sizeof($listeIngredients);
 
	    $requete = 'SELECT * FROM recette WHERE titre LIKE "%'.$listeIngredients[0].'%"';
 
	    for($i = 1; $i < $nbrIngredients; $i++){
 
		if($listeIngredients[$i] != null){
 
		    $requete .= ' OR titre LIKE "%'.$listeIngredients[$i].'%"';
 
		}
 
	    }
 
 
	    $query = $this->pdo->prepare($requete);
	    $query->execute();
 
	    if($row = $query->fetch(PDO::FETCH_OBJ)){
 
		while($row){
 
		    $result[] = new Recette($row->id, $row->titre, $row->nbpersonnes, $row->dureepreparation, $row->dureeattente,
					    $row->dureecuisson, $row->difficulte, $row->note, $row->prix, $row->ingredients,
					    $row->preparation, $row->conseil, $row->timestamp, $row->date,
					    $row->image, $row->description, $row->validation, $row->idutilisateur);
 
 
		}
 
		return $result;
 
	    } else{ /* [....] Encore du code etc.. */.
L'erreur se trouve ici: "$result[] = new Recette($row->id etc..."

Merci d'avance à celui qui pourra me donner un coup de main .
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2011, 23h07   #2
Membre à l'essai
 
Homme F. Mithieux
Étudiant
Inscription : juin 2008
Messages : 99
Détails du profil
Informations personnelles :
Nom : Homme F. Mithieux
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2008
Messages : 99
Points : 20
Points : 20
En fait, après potassage intensif de la doc,

j'ai pris la décision de faire ainsi, et ça marche !

Voilà le changement:

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
	public function searchAndDisplay($ingredients){
 
	    $result = array();
 
	    $listeIngredients = explode('-', $ingredients);
 
	    $nbrIngredients = sizeof($listeIngredients);
 
	    $requete = 'SELECT * FROM recette WHERE titre LIKE "%'.$listeIngredients[0].'%"';
 
	    for($i = 1; $i < $nbrIngredients; $i++){
 
		if($listeIngredients[$i] != null){
 
		    $requete .= ' OR titre LIKE "%'.$listeIngredients[$i].'%"';
 
		}
 
	    }
 
 
	    $query = $this->pdo->prepare($requete);
	    $query->execute();
 
	    while($row = $query->fetch(PDO::FETCH_OBJ)){
 
		    $result[] = new Recette($row->id, $row->titre, $row->nbpersonnes, $row->dureepreparation, $row->dureeattente,
					    $row->dureecuisson, $row->difficulte, $row->note, $row->prix, $row->ingredients,
					    $row->preparation, $row->conseil, $row->timestamp, $row->date,
					    $row->image, $row->description, $row->validation, $row->idutilisateur);
 
	    }
	    if(sizeof($result) == 0){ /* Suite du code */
J'ai donc viré le if($row) qui ratait, pour laisser le while faire un fetch object, et du coup, le "else" a été remplacé par une verification, afin de voir si mon tableau est vide ou pas !

Enfin bref, si vous avez des propositions d'amélioration, je suis preneur !
Arget est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 07h55   #3
Membre chevronné
 
Avatar de Marc3001
 
Homme
Ingénieur développement logiciels
Inscription : février 2008
Messages : 430
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : février 2008
Messages : 430
Points : 682
Points : 682
Ton il bouclait à l'infini.......
__________________
Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

Linus Torvalds
Marc3001 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 20h09.


 
 
 
 
Partenaires

Hébergement Web