Conflit entre requête et fonction SQL ?
Résolu
Evelyne31
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
Evelyne31 Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
Evelyne31 Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bonjour,
J'ai fait un formulaire de recherche qui compte les résultats et les affiche page par page.
Tout marchait bien en faisant une connexion "classique" :
mysql_connect('localhost', 'root', 'root');
mysql_select_db('lithotheque');
Puis j'ai voulu remplacer cette connexion provisoire par celle que j'ai utilisé pour tout mon site, qui est dans un fichier de fonctions.
Et là : catastrophe, plus rien ne fonctionne.
Voici les erreurs que j'obtiens :
- Resource id #6string(35) ???
- Warning: mysql_query() expects parameter 1 to be string, resource given in .... ligne 57
Je pense qu'il y a un conflit ou quelque chose qui fait double emploi entre ma requête et la fonction SQL ?
Si vous pouviez m'aider à comprendre ce serait super et je vous en remercie par avance. Je galère là-dessus depuis 2 jours et toutes mes recherches n'ont rien donné. Non plus les var_dump, print_r et autres echo...
Evelyne
Ma requête :
Ma fonction :
Bonjour,
J'ai fait un formulaire de recherche qui compte les résultats et les affiche page par page.
Tout marchait bien en faisant une connexion "classique" :
mysql_connect('localhost', 'root', 'root');
mysql_select_db('lithotheque');
Puis j'ai voulu remplacer cette connexion provisoire par celle que j'ai utilisé pour tout mon site, qui est dans un fichier de fonctions.
Et là : catastrophe, plus rien ne fonctionne.
Voici les erreurs que j'obtiens :
- Resource id #6string(35) ???
- Warning: mysql_query() expects parameter 1 to be string, resource given in .... ligne 57
Je pense qu'il y a un conflit ou quelque chose qui fait double emploi entre ma requête et la fonction SQL ?
Si vous pouviez m'aider à comprendre ce serait super et je vous en remercie par avance. Je galère là-dessus depuis 2 jours et toutes mes recherches n'ont rien donné. Non plus les var_dump, print_r et autres echo...
Evelyne
Ma requête :
$retour_total_query = SQLSelect("SELECT count(a.ID_gite) AS total FROM GITE a, DEPARTEMENT b, AS_COMMU_DEPAR c WHERE a.ID_commune = c.COMMUNE_ID_commune and b.ID_departement = c.DEPARTEMENT_ID_departement and b.codeDepartement = '".$mot_recherche."' "); $clauseWhere; // Critères de recherche $retour_total = mysql_query($retour_total_query) or die('Erreur SQL !'.$retour_total_query.'<br>'.mysql_error()); $donnees_total = mysql_fetch_assoc($retour_total); //On range retour sous la forme d'un tableau. $total = $donnees_total['total'] or die('requete =>'.$total.'<br> error->'.mysql_error()); //On récupère le total pour le placer dans la variable $total.
Ma fonction :
function SQLSelect($sql) { global $BDD_host; global $BDD_base; global $BDD_user; global $BDD_password; mysql_pconnect($BDD_host, $BDD_user, $BDD_password) or die("<font color=\"red\">Erreur de connexion : " . mysql_error() . "</font>"); mysql_select_db($BDD_base) or die("<font color=\"red\">Erreur select db : " . mysql_error() . "</font>"); mysql_query("SET NAMES 'utf8'"); $rs = mysql_query($sql) or die("Erreur sur la requete : <font color=\"red\">$sql" . "|" . mysql_error() . "</font>"); $num = mysql_num_rows($rs); if ($num == 0) return false; else return $rs; }
A voir également:
- Conflit entre requête et fonction SQL ?
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Logiciel sql - Télécharger - Bases de données
- Fonction remplacer sur word - Guide
11 réponses
Bonjour,
si je comprends bien ton code, tu fais un mysql_query sur un mysql_query, ça ne peut pas marcher.
Essaye de supprimer la ligne :
$retour_total = mysql_query($retour_total_query) or die('Erreur SQL !'.$retour_total_query.'<br>'.mysql_error());
et de passer à ton mysql_fetch_assoc la variable $retour_total_query
si je comprends bien ton code, tu fais un mysql_query sur un mysql_query, ça ne peut pas marcher.
Essaye de supprimer la ligne :
$retour_total = mysql_query($retour_total_query) or die('Erreur SQL !'.$retour_total_query.'<br>'.mysql_error());
et de passer à ton mysql_fetch_assoc la variable $retour_total_query
Bonjour ThEBiShOp,
Je te remercie pour ta réponse, et ta rapidité. Il me semblait bien que le problème venait de là. J'ai modifié mon code selon tes indications et les résultats sont OK.
Par contre j'ai le même problème avec la requête suivante et là je ne fais pas de mysql_query sur un mysql_query ? Pourtant j'ai le même message d'erreur que précédemment : "Warning: mysql_query() expects parameter 1 to be string, resource given in...".
Je soumets cette nouvelle requête à ton oeil expert. L'erreur indiquée se situe ici
Merci pour ton aide.
Evelyne
Je te remercie pour ta réponse, et ta rapidité. Il me semblait bien que le problème venait de là. J'ai modifié mon code selon tes indications et les résultats sont OK.
Par contre j'ai le même problème avec la requête suivante et là je ne fais pas de mysql_query sur un mysql_query ? Pourtant j'ai le même message d'erreur que précédemment : "Warning: mysql_query() expects parameter 1 to be string, resource given in...".
Je soumets cette nouvelle requête à ton oeil expert. L'erreur indiquée se situe ici
$retour_messages = mysql_query($retour_messages_query);:
mysql_query("SET NAMES 'utf8'"); $retour_messages_query = SQLSelect("SELECT a.numGite, b.codeDepartement, b.nomDepartement FROM GITE a, DEPARTEMENT b, AS_COMMU_DEPAR c WHERE a.ID_commune = c.COMMUNE_ID_commune and b.ID_departement = c.DEPARTEMENT_ID_departement "); $clauseWhere. // Critères de recherche " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." "; // Pagination*/ $retour_messages = mysql_query($retour_messages_query); break;
Merci pour ton aide.
Evelyne
Si tu fais exactement la même chose
en fait, tu soumets ta requête à la fonction SQLSelect et dans cette fonction, il y a un mysql_query. Ta fonction retourne un jeu de résultat que tu mets dans la variable $retour_messages_query. Ensuite tu soumets $retour_messages_query à un mysql_query, mais mysql_query attends une requête, que tu ne lui donnes pas.
en fait, tu soumets ta requête à la fonction SQLSelect et dans cette fonction, il y a un mysql_query. Ta fonction retourne un jeu de résultat que tu mets dans la variable $retour_messages_query. Ensuite tu soumets $retour_messages_query à un mysql_query, mais mysql_query attends une requête, que tu ne lui donnes pas.
Super ThEBiShOp, j'ai enfin compris et cela va me servir pour d'autres fichiers en attente. Merci beaucoup pour ton aide, dire que ça fait 2 jours que je tournais en rond !
Maintenant j'ai un problème d'affichage mais je me creuse un peu avant de poster un nouveau sujet.
Très bonne journée,
Evelyne
Maintenant j'ai un problème d'affichage mais je me creuse un peu avant de poster un nouveau sujet.
Très bonne journée,
Evelyne
Re-bonjour,
Désolée mais je crois que j'ai mis un peu trop vite mon post en "résolu". De plus je pensais avoir compris mais j'ai un nouveau problème du même ordre et je n'arrive pas à le résoudre.
Je récupère le résultat de ma requête $retour_messages_query dans un tableau $retour_messages = mysql_fetch_assoc. Cela allait bien pour la précédente requête mais pas ici. Encore merci ThEBiShOp ;-)
La requête :
J'ai essayé plusieurs solutions (foreach...) sans succès. Voici le message d'erreur : Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in line 267. Cette ligne est dans le code final d'affichage des résultats qui semble poser problème :
Je vois bien qu'il y a encore conflit entre 2 array. Merci par avance pour votre aide, je craque.
Evelyne
Désolée mais je crois que j'ai mis un peu trop vite mon post en "résolu". De plus je pensais avoir compris mais j'ai un nouveau problème du même ordre et je n'arrive pas à le résoudre.
Je récupère le résultat de ma requête $retour_messages_query dans un tableau $retour_messages = mysql_fetch_assoc. Cela allait bien pour la précédente requête mais pas ici. Encore merci ThEBiShOp ;-)
La requête :
$retour_messages_query = SQLSelect("SELECT a.numGite, b.codeDepartement FROM GITE a, DEPARTEMENT b, AS_COMMU_DEPAR c WHERE a.ID_commune = c.COMMUNE_ID_commune and b.ID_departement = c.DEPARTEMENT_ID_departement and b.codeDepartement = '".$mot_recherche."' "); $clauseWhere. // Critères de recherche " ORDER BY numGite ASC LIMIT ".$premiereEntree.", ".$messagesParPage." ";// Pagination $retour_messages = mysql_fetch_assoc($retour_total_query); //On range retour sous la forme d'un tableau.
J'ai essayé plusieurs solutions (foreach...) sans succès. Voici le message d'erreur : Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in line 267. Cette ligne est dans le code final d'affichage des résultats qui semble poser problème :
while($donnees_messages = mysql_fetch_array($retour_messages) or die(mysql_error()) ) { ...
Je vois bien qu'il y a encore conflit entre 2 array. Merci par avance pour votre aide, je craque.
Evelyne
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici le code ci-dessous, pour un affichage page par page classique. Merci par avance si vous pouviez m'indiquer pourquoi j'ai tout faux ? Je ne comprends pas pourtant vos explications semblaient claires ?
Evelyne
Evelyne
<?php if($total) { // début du tableau echo $total; echo '<table id=table1>'."\n"; // première ligne on affiche les titres prénom et surnom dans 2 colonnes echo '<tr>'; echo '<th>Numéros des gîtes</th>'; //echo '<th>Nature des gîtes</th>'; echo '</tr>'."\n"; // lecture et affichage des résultats sur 1 colonne, 1 résultat par ligne. while($donnees_messages = mysql_fetch_array($retour_messages) or die(mysql_error()) ) { echo '<tr>'; echo '<td ><a href="../lith_page_gite.php?numGite='. $donnees_messages['numGite'] . '">' . $donnees_messages['numGite'] . '</a></td>'; echo '</tr>'."\n"; } echo '</table>'."\n"; // fin du tableau. }
Je pense que le problème est similaire à ceux d'avant, ce coup ci ce n'est pas des mysql_query que tu fais en trop, mais tu fais un mysql_fetch_array sur un mysql_fetch_assoc.
Le plus simple c'est que tu retires la ligne :
$retour_messages = mysql_fetch_assoc($retour_total_query);
et change ton while :
while($donnees_messages = mysql_fetch_array($retour_total_query) or die(mysql_error()) )
Le plus simple c'est que tu retires la ligne :
$retour_messages = mysql_fetch_assoc($retour_total_query);
et change ton while :
while($donnees_messages = mysql_fetch_array($retour_total_query) or die(mysql_error()) )
Merci encore.
Mon tableau listant les résultats ne s'affiche plus et je n'ai aucun message d'erreur. Je tente de reprendre morceau par morceau mon code en faisant des echo, print_r, var_dump...
Dès la 1ère requête (pour compter le nombre d'enregistrements) quelque chose ne va pas, un "print_r ($retour_total_query);" renvoie : "Resource id #6". Je n'ai pas trouvé de solution sur le web.
Ensuite des echos sur $messagesParPage, $nombreDePages, $total renvoient bien les bonnes valeurs.
Il me semble que $retour_total_query est vide car un echo donne "array" et j'avais déjà eu ce souci ?
Une piste peut-être ? Merci par avance,
Evelyne
Mon tableau listant les résultats ne s'affiche plus et je n'ai aucun message d'erreur. Je tente de reprendre morceau par morceau mon code en faisant des echo, print_r, var_dump...
Dès la 1ère requête (pour compter le nombre d'enregistrements) quelque chose ne va pas, un "print_r ($retour_total_query);" renvoie : "Resource id #6". Je n'ai pas trouvé de solution sur le web.
Ensuite des echos sur $messagesParPage, $nombreDePages, $total renvoient bien les bonnes valeurs.
Il me semble que $retour_total_query est vide car un echo donne "array" et j'avais déjà eu ce souci ?
Une piste peut-être ? Merci par avance,
Evelyne
si tu veux, mets ton code dans https://pastebin.com/ ça sera beaucoup plus clair, parce que là je peux pas trop t'en dire plus sans voir concrètement ce que tu as fait ^^
Merci ThEBiShOp,
J'accepte bien volontiers ton aide. Si tu pouvais, STP, juste prendre quelques mn pour balayer mon code, je suis sûre que mon/mes erreurs vont te sauter aux yeux.
Voici le lien : http://pastebin.archlinux.fr/459797
Je te remercie encore par avance,
Evelyne
J'accepte bien volontiers ton aide. Si tu pouvais, STP, juste prendre quelques mn pour balayer mon code, je suis sûre que mon/mes erreurs vont te sauter aux yeux.
Voici le lien : http://pastebin.archlinux.fr/459797
Je te remercie encore par avance,
Evelyne
Je pense qu'il y a un problème dès le début, dans la 1ère requête :
ligne 43 : "print_r ($retour_total_query);" renvoie "Resource id #6"
Ensuite, ligne 57 :
"echo $donnees_total;" affiche "Array". Ca c'est que le tableau est vide. Normal puisque $retour_total_query est vide.
Les 3 autres echos sont OK : echo $messagesParPage;
echo $nombreDePages;
echo $total;
Je suis sûre que c'est toujours le même problème, des mysql_query sur des query, et des mysql_fetch_array sur des mysql_fetch_assoc...
Je ne maîtrise pas du tout ça.
Au final, je n'ai que l'entête de mon tableau qui s'affiche, aucun résultat dedans.
La ligne "Pour le terme recherché : 31, il y a 14 enregistrements dans la Lithothèque." est OK, c'est bien 31 et 14.
Merci.
Evelyne
ligne 43 : "print_r ($retour_total_query);" renvoie "Resource id #6"
Ensuite, ligne 57 :
"echo $donnees_total;" affiche "Array". Ca c'est que le tableau est vide. Normal puisque $retour_total_query est vide.
Les 3 autres echos sont OK : echo $messagesParPage;
echo $nombreDePages;
echo $total;
Je suis sûre que c'est toujours le même problème, des mysql_query sur des query, et des mysql_fetch_array sur des mysql_fetch_assoc...
Je ne maîtrise pas du tout ça.
Au final, je n'ai que l'entête de mon tableau qui s'affiche, aucun résultat dedans.
La ligne "Pour le terme recherché : 31, il y a 14 enregistrements dans la Lithothèque." est OK, c'est bien 31 et 14.
Merci.
Evelyne
OK pour la ligne 43. Je vais voir ce que cela signifie.
C'est vrai que c'est incompréhensible, d'autant que tout marchait bien encore la semaine dernière avec une connexion de type :
mysql_connect('localhost', 'root', 'root');
mysql_select_db('bdd');
et un SELECT pour les requêtes.
J'ai juste voulu utiliser ma fonction pour faire tout bien propre.
SQLSelect est une fonction (dans un fichier à part) qui fait appel à mysql_query donc je ne peux pas remplacer SQLSelect par mysql_query.
Voici la fonction (utilisée pour tout mon site et qui est nickel) :
Je te remercie pour ton aide mais ne perds pas trop de temps. J'ai tout imprimé et je vais décortiquer le code actuel et l'ancien pour voir. C'est galère mais ça fait progresser.
Evelyne
C'est vrai que c'est incompréhensible, d'autant que tout marchait bien encore la semaine dernière avec une connexion de type :
mysql_connect('localhost', 'root', 'root');
mysql_select_db('bdd');
et un SELECT pour les requêtes.
J'ai juste voulu utiliser ma fonction pour faire tout bien propre.
SQLSelect est une fonction (dans un fichier à part) qui fait appel à mysql_query donc je ne peux pas remplacer SQLSelect par mysql_query.
Voici la fonction (utilisée pour tout mon site et qui est nickel) :
function SQLSelect($sql) { global $BDD_host; global $BDD_base; global $BDD_user; global $BDD_password; mysql_pconnect($BDD_host, $BDD_user, $BDD_password) or die("<font color=\"red\">Erreur de connexion : " . mysql_error() . "</font>"); mysql_select_db($BDD_base) or die("<font color=\"red\">Erreur select db : " . mysql_error() . "</font>"); mysql_query("SET NAMES 'utf8'"); $rs = mysql_query($sql) or die("Erreur sur la requete : <font color=\"red\">$sql" . "|" . mysql_error() . "</font>"); $num = mysql_num_rows($rs); if ($num == 0) return false; else return $rs; }
Je te remercie pour ton aide mais ne perds pas trop de temps. J'ai tout imprimé et je vais décortiquer le code actuel et l'ancien pour voir. C'est galère mais ça fait progresser.
Evelyne
Une indication : j'ai fait un "print_r($donnees_total);" en ligne 47, juste en-dessous de "$donnees_total = mysql_fetch_assoc($retour_total_query);" et cela m'affiche :
Array correspond à "$donnees_total".
"[total] => 14" : c'est juste il y a bien 14 résultats
En fait cela correspond à la ligne 49 "$total = $donnees_total['total'] or die('requete =>'.$total.'<br> " qui ne s'affichait pas avant ?
Par contre je ne comprends pas du tout cette ligne de code, à quoi correspond ce ['total'] qui n'apparaît nulle part ailleurs dans mon fichier ???
Merci encore.
Evelyne
Array ( [total] => 14 )
Array correspond à "$donnees_total".
"[total] => 14" : c'est juste il y a bien 14 résultats
En fait cela correspond à la ligne 49 "$total = $donnees_total['total'] or die('requete =>'.$total.'<br> " qui ne s'affichait pas avant ?
Par contre je ne comprends pas du tout cette ligne de code, à quoi correspond ce ['total'] qui n'apparaît nulle part ailleurs dans mon fichier ???
Merci encore.
Evelyne