Conflit entre requête et fonction SQL ?

Résolu/Fermé
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 - 20 mars 2013 à 12:13
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 - 20 mars 2013 à 17:05
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 :
$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;
}



11 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 12:16
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
1
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 12:31
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
$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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 12:35
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.
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 12:42
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 12:43
bon courage
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 15:06
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 :
$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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 15:15
tu peux montrer ce qu'il y a avant la ligne de l'erreur ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 15:19
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


<?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.
   }
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 15:23
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()) )
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 15:41
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 15:47
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 ^^
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 16:05
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 16:07
ça c'est pas certain, si je pouvais tester, c'est sûr que ça irait plus vite, mais c'est pas très beaucoup possible.

Maintenant que j'ai ton code sous les yeux, est-ce que tu peux me dire les lignes (le n°) qui te posent problème et le problème en question.
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 16:17
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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 16:25
ligne 43, c'est un ressource id, c'est normal je pense.

par contre j'ai du mal à comprendre comment tu peux avoir $total alors que $donnees_total est vide.

essaye de remplacer SQLSelect par mysql_query pour voir ce que ça donne
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 16:45
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) :
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
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 16:56
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 ( [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
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
20 mars 2013 à 16:59
ta requête : SELECT count(a.ID_gite) AS total

c'est ce champ là que tu retrouves dans $donnees_total
0
Evelyne31 Messages postés 55 Date d'inscription mardi 17 juillet 2012 Statut Membre Dernière intervention 13 septembre 2016 5
20 mars 2013 à 17:05
OK, merci. J'ai tout imprimé, je rentre ça me fera une coupure et je reprends en arrivant.
Merci encore pour ton aide, je reposterai certainement ce soir... peut-être pour indiquer la solution ??? ;-)
Bonne fin d'après-midi,
Evelyne
0