IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur Warning mysqli_fetch_assoc()


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre régulier Avatar de 2h15Crew
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Points : 106
    Points
    106
    Par défaut
    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 =)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Bon j'ai un peu avancé, mais ça ne marche toujours pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'ouvres ta connexion en objet mais tu fais tout le reste en procédurale pourquoi ?

    active la gestions des erreurs pour mysqli aussi

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Oups, merci. Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 ?

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    - vérifié bien ton $stmt a chaque fois
    Comment exactement ?

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

    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.

    mysqli a comme client mysqlnd ?
    Mysqlnd est un driver pour mysqli (entre autre), pourquoi ?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 ?

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    var dump m'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(mysqli_stmt)#2 (0) { }
    ton mysqli est compilé avec ?
    Heu, j'en ai aucune idée, je pourrais savoir comment ?

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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)

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    A cette ligne j'ai :

    Client API library version 5.0.32


    Pour le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /xxxx.xxx/xxx/www/xxxxx/sql.php on line 24

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Et il n'y a pas de méthode plus traditionnelle hormis un FetchAll ?

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Hé bien visiblement non, j'ai toujours la même erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    montre ton code modifié

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($row = mysqli_stmt_fetch($stmt))
    {
        $res[]=$row;
    }

  19. #19
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    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...

  20. #20
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    garde ton mysqli_stmt_bind_result

    et a chaque tout de boucle fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res[] = array($stmt, $artID, $edition, $mois, $rub, $titre, $texte, $fest, $saison);

    ps : tu peux binder un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_stmt_bind_result($stmt, $data['artID'], $data['edition'] ....)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] erreur Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result
    Par kate59 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/02/2008, 17h52
  2. [ASE12] mess. erreur : WARNING - Fatal Error 644 occurred at Sep 21 2007 10:27PM.
    Par padraig29 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 28/09/2007, 16h08
  3. Erreur: Warning:overflow encountered in ubyte_scalars
    Par deb_Sous_Python dans le forum Calcul scientifique
    Réponses: 5
    Dernier message: 01/05/2007, 13h12
  4. Réponses: 16
    Dernier message: 29/05/2006, 17h52
  5. Réponses: 3
    Dernier message: 18/05/2006, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo