Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 10/06/2011, 16h59   #1
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Par défaut Erreur Warning mysqli_fetch_assoc()

Bonsoir,

Je me décide à poster sur ce forum car je commence vraiment à saturer. J'ai cherché et un peu tout essayé... Même s'il s'agit d'une erreur commune, je n'arrive pas à la résoudre :

Code :
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, object given in /xxxxx/xxxx/xxxx/xxxxx/sql.php on line 20
Voici mon code (j'ai masqué les paramètres de connexion) :

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
	<?php 
 
 
	function getArt($id){
 
 
	$conn = new mysqli('host','user','pass', 'nomdb');
	$res=array();
 
	if ($stmt = mysqli_prepare($conn, "SELECT * FROM ARTICLES WHERE id = ?")) { 
 
 
		mysqli_stmt_bind_param($stmt, "i", $id);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_fetch($stmt);
 
		while($reponse=mysqli_fetch_assoc($stmt)){
			  $res[]=$reponse;
		  }
		 return $res;
 
		mysqli_close($conn);
 
		}
	}
 
 
	?>
A noter que ma requête marche sous phpmyadmin si je remplace le ? par un id existant par exemple. J'ai dû mal comprendre un truc fondamental là

Merci
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 17h09   #2
Membre régulier
 
Avatar de 2h15Crew
 
Homme Valentin
Étudiant
Inscription : mai 2011
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Valentin
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2011
Messages : 79
Points : 97
Points : 97
Le problème ne vient pas de ta requête. Regarde ton message d'erreur, il te dit que mysqli_fetch_assoc() attend comme premier paramètre un mysqli_result.
Or ta variable $stmt est de type mysqli_stmt...

Je ne sais pas comment résoudre ton problème mais je pense que c'est déjà une bonne piste =)
2h15Crew est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h30   #3
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Bon j'ai un peu avancé, mais ça ne marche toujours pas :
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
 
	<?php 
 
 
	function getArt($id){ //Retourne l'article en fonction de l'ID
 
 
	$conn = new mysqli('mysql5-8','xxxx','xxxxx', 'xxxxxx');
 
	$res=array();
 
	if ($stmt = mysqli_prepare($conn, "SELECT * FROM ARTICLES WHERE id = ?")) { 
 
 
		mysqli_stmt_bind_param($stmt, "i", $id);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_bind_result($stmt, $artID, $edition, $mois, $rub, $titre, $texte, $fest, $saison);
		$result = mysqli_stmt_fetch($stmt);
 
		echo $edition;
 
		while($row = mysqli_fetch_assoc($result)){
 
			  $res[]=$row;
		  }
		  return $res;
 
 
		mysqli_close($conn);
 
		}
	}
 
 
	?>
Il me retourne :

Code :
1
2
METZ
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in /xxxxx/xxxxx/xxxxx/xxxxxx/sql.php on line 21
Il m'affiche bien mes colonnes si je lui demande une par une, par contre je n'arrive pas à toutes les fetch dans un tableau. $result a l'air de valoir 1 donc j'imagine que je n'envoie pas la bonne variable. le soucis c'est que je ne sais pas quoi envoyer Le fait que ce soit une requête préparée me pose un problème...
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h39   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
t'ouvres ta connexion en objet mais tu fais tout le reste en procédurale pourquoi ?

active la gestions des erreurs pour mysqli aussi
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h52   #5
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Oups, merci. Comme ceci ?

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
	<?php 
 
 
	function getArt($id){ //Retourne l'article en fonction de l'ID
 
 
	mysqli_report(MYSQLI_REPORT_ALL);
	$conn = mysqli_connect('mysql5-8','xxxx','xxx', 'xxxx');
	if (mysqli_connect_errno()) {
    printf("Échec de la connexion : %s\n", mysqli_connect_error());
    exit();
}
 
	$res=array();
 
	if ($stmt = mysqli_prepare($conn, "SELECT * FROM ARTICLES WHERE id = ?")) { 
 
 
		mysqli_stmt_bind_param($stmt, "i", $id);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_bind_result($stmt, $artID, $edition, $mois, $rub, $titre, $texte, $fest, $saison);
		mysqli_stmt_execute($stmt);
		mysqli_stmt_fetch($stmt);
 
		echo $edition;
 
		while($row = mysqli_fetch_array($result)){
 
			  $res[]=$row;
		  }
		  return $res;
 
 
		mysqli_close($conn);
 
		}
	}
 
 
	?>
Pas d'idée sur mon problème sinon ?
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 10h58   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
oui comme ca;
- vérifié bien ton $stmt a chaque fois,
- pourquoi tu fais plusieurs execute ?
- a quoi sert ton mysqli_stmt_bind_result si tu fait un fetch_array après ?
- mysqli a comme client mysqlnd ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h14   #7
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Citation:
- vérifié bien ton $stmt a chaque fois
Comment exactement ?

Citation:
pourquoi tu fais plusieurs execute ?
Parce que je suis tête en l'air. A force de tester des trucs...

Citation:
a quoi sert ton mysqli_stmt_bind_result si tu fait un fetch_array après ?
Parce que le fetcharray marche pas et je voulais juste voir si je pouvais afficher le contenu des colonnes (ce qui est le cas). mais effectivement il sert à rien.

Citation:
mysqli a comme client mysqlnd ?
Mysqlnd est un driver pour mysqli (entre autre), pourquoi ?
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h17   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par Shinosha Voir le message
Comment exactement ?
avec un var_dump

Citation:
Envoyé par Shinosha Voir le message
Mysqlnd est un driver pour mysqli (entre autre), pourquoi ?
ton mysqli est compilé avec ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h25   #9
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
var dump m'affiche :

Code :
object(mysqli_stmt)#2 (0) { }
Citation:
ton mysqli est compilé avec ?
Heu, j'en ai aucune idée, je pourrais savoir comment ?
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h29   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
pour mysqlnd c'est dans ton phpinfo (mysqli > Client API library version )

remontre ton code propre et ton erreur
(parce que ton erreur c'est mysqli_fetch_assoc mais c'est mysqli_fetch_array dans ton code)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h45   #11
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
A cette ligne j'ai :

Client API library version 5.0.32


Pour le code :

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
	<?php 
 
	mysqli_report(MYSQLI_REPORT_ALL);
 
	function getArt($id){ //Retourne l'article en fonction de l'ID
 
 
 
	$conn = mysqli_connect('mysql5-8','xxxxx','xxxx', 'xxxx');
	if (mysqli_connect_errno()) {
		printf("Échec de la connexion : %s\n", mysqli_connect_error());
		exit();
	}
 
	$res=array();
 
	if ($stmt = mysqli_prepare($conn, "SELECT * FROM ARTICLES WHERE id = ?")) { 
 
 
		mysqli_stmt_bind_param($stmt, "i", $id);
		mysqli_stmt_execute($stmt);
		$result = mysqli_stmt_fetch($stmt);
 
		while($row = mysqli_fetch_array($result)){
 
			  $res[]=$row;
		  }
		  return $res;
 
 
		mysqli_close($conn);
 
		}
	}
 
 
	?>
Code :
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /xxxx.xxx/xxx/www/xxxxx/sql.php on line 24
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h48   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
mais enlève ton mysqli_stmt_fetch ...

poour le reste c'est que c'est n'est pas compiler avec mysqlnd, dommage t'aurai eu le fetch_all
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h53   #13
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Et il n'y a pas de méthode plus traditionnelle hormis un FetchAll ?
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 11h54   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par Shinosha Voir le message
Et il n'y a pas de méthode plus traditionnelle hormis un FetchAll ?
si avec ta boucle c'est correct
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 12h12   #15
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Hé bien visiblement non, j'ai toujours la même erreur :

Code :
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /xxxx.xxx/xxx/www/xxxxx/sql.php on line 24
fetch_array n'aime pas ce que je lui envoie. Le soucis c'est que je ne vois pas comment lui envoyer le résultat de la requête, comme il le demande
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 13h27   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
montre ton code modifié
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 13h57   #17
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
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
	<?php 
 
 
 
	function getArt($id){ //Retourne l'article en fonction de l'ID
 
	mysqli_report(MYSQLI_REPORT_ALL);
	$conn = mysqli_connect('mysql5-8','xxxx','xxxx', 'xxxx');
	if (mysqli_connect_errno()) {
		printf("Échec de la connexion : %s\n", mysqli_connect_error());
		exit();
	}
 
	$res=array();
 
		$stmt = mysqli_prepare($conn, "SELECT * FROM ARTICLES WHERE id = ?");
 
		mysqli_stmt_bind_param($stmt, "i", $id);
		mysqli_stmt_execute($stmt);
 
 
		while($row = mysqli_fetch_array($stmt)){
 
			  $res[]=$row;
		}
		return $res;
 
 
 
	}
 
 
	?>
Code :
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, object given in /xxxx.xxx/xxxx/xxx/xxxxxxx/sql.php on line 23
EDIT :

Ok j'ai trouvé, mauvaise instruction , il fallait utiliser :

while($row = mysqli_stmt_fetch($stmt)){

$res[]=$row;
}

Bon par contre ça ne me retourne pas ce que je veux (cad un tableau contenant toutes les informations de l'article)
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h13   #18
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
et avec

Code :
1
2
3
4
while($row = mysqli_stmt_fetch($stmt))
{
    $res[]=$row;
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h14   #19
Futur Membre du Club
 
Homme
Étudiant
Inscription : janvier 2008
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2008
Messages : 46
Points : 17
Points : 17
Arf, grilled. Oui effectivement, l'autre n'existe pas en mysqli. Par contre mon tableau ne contient que "1"...

Un jour ce marchera comme je veux...
Shinosha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/06/2011, 14h17   #20
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
garde ton mysqli_stmt_bind_result

et a chaque tout de boucle fait

Code :
$res[] = array($stmt, $artID, $edition, $mois, $rub, $titre, $texte, $fest, $saison);

ps : tu peux binder un tableau
Code :
mysqli_stmt_bind_result($stmt, $data['artID'], $data['edition'] ....)
__________________
http://blog.stealth35.com/
stealth35 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 04h58.


 
 
 
 
Partenaires

Hébergement Web