[résolu] Requête SQL qui passe en ligne mais pas en local

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Lilive
Salamandre
Messages : 39
Inscription : 02 mars 2006, 09:50

[résolu] Requête SQL qui passe en ligne mais pas en local

Message par Lilive »

Bonjour,
J'ai un petit soucis étrant avec la requête SQL suivante :

$sql="SELECT l.notice, s.nom, l.site, l.nomlot, l.dateinf, l.datesup, c.commune, s.insee, s.pays FROM site AS s, lot AS l, typologie AS t, communes AS c WHERE s.idsite=l.site AND c.pays=s.pays AND c.insee=s.insee";
$sql.=" GROUP BY l.notice ORDER BY c.commune, s.nom, l.dateinf, l.datesup";

Cette requête passe parfaitement en ligne :
http://iceramm.free.fr/bdrechercher.php

mais en local (même scripts php, même base), ça me renvoie l'erreur suivante :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\philippe\iceramm\bdrechercher.php on line 148
ceci correspondant à la récupération des résulats...

J'avoue sécher un peu : si une requête fonctionne en ligne, pourquoi ne fonctionne-t-elle pas en local ? Est-ce que la dernière version de easyphp (1.8) pourrait faire des blagues ?

Merci de votre aide.

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Dernière modification par Lilive le 31 mars 2006, 13:50, modifié 1 fois.
Lilive
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Message par SB »

Beaucoup de choses fonctionnent en ligne chez free et pas en local avec easyphp en raison du fichier de configuration php.ini beaucoup plus restrictif dans le deuxième cas.
Peux-tu mettre un morceau de code un peu plus long, contenant notamment le"mysql_query" et le "mysql_num_rows" ?
Lilive
Salamandre
Messages : 39
Inscription : 02 mars 2006, 09:50

Message par Lilive »

Voici le code complet :

Code : Tout sélectionner

// construction de la requête

$sql="SELECT l.notice, s.nom, l.site, l.nomlot, l.dateinf, l.datesup, c.commune, s.insee, s.pays FROM site AS s, lot AS l, typologie AS t, communes AS c WHERE s.idsite=l.site AND c.pays=s.pays AND c.insee=s.insee";
if($departement<>''){$sql.=" AND c.numdept='$departement'";}
if($idforme<>''){$sql.=" AND t.lot=l.notice AND t.forme='$idforme'";}
if($idgt<>''){$sql.=" AND t.lot=l.notice AND t.gt='$idgt'";}
if($dateinf<>''&&$datesup<>''){$sql.=" AND ((l.dateinf<=$dateinf AND l.datesup>=$datesup) OR (l.dateinf>=$dateinf AND l.dateinf<=$datesup) OR (l.datesup>=$dateinf AND l.datesup<=$datesup) OR (l.dateinf>=$dateinf AND l.datesup<=$datesup))";}
if($dateinf<>''&&$datesup==''){$sql.=" AND (l.datesup>=$dateinf)";}
if($dateinf==''&&$datesup<>''){$sql.=" AND (l.dateinf<=$datesup)";}
if($argdate<>'tous'){$sql.=" AND l.argdate='$argdate'";}
if($typelot<>'tous'){$sql.=" AND l.type='$typelot'";}
if($typesite<>'tous'){$sql.=" AND s.type='$typesite'";}
if($typedec<>'tous'){$sql.=" AND s.typedec='$typedec'";}
$sql.=" GROUP BY l.notice ORDER BY c.commune, s.nom, l.dateinf, l.datesup";

// lancement de la requête
$req=mysql_query($sql,$conn);

// récupération du nombre de résultats
$nbr=mysql_num_rows($req);
Toute la partie avec les "if" peut-être ignorée : cela correspond aux éventuels champs saisis dans le formulaire de recherche et la requête plante sans avoir saisi quoi que ce soit...

En espérant que tu pourras me dépanner... :roll: Merci de ton attention.
Lilive
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Message par Asumbaa »

Bonjour,

Tu peux déjà afficher ta requête juste après l'avoir construite puis la coller directement dans l'admin Mysql sur ta base en local, voir si elle s'exécute correctement.
Lilive
Salamandre
Messages : 39
Inscription : 02 mars 2006, 09:50

Message par Lilive »

L'affichage à l'écran de la requête ne pose aucun problème...
J'ai demandé à l'utilisateur chez qui ça plante de faire le test sur phpmyadmin (je ne suis pas sur place... c'est pratique...) :?

Une autre question me vient :
:?: L'ordre entre le GROUP BY et le ORDER BY a-t-il une importance ?
Lilive
SB
Varan
Messages : 1095
Inscription : 05 mars 2004, 18:38

Message par SB »

Stop. Cherche plus.

Code : Tout sélectionner

if($dateinf<>''&&$datesup<>''){$sql.=" AND ((l.dateinf<=$dateinf AND l.datesup>=$datesup) OR (l.dateinf>=$dateinf AND l.dateinf<=$datesup) OR (l.datesup>=$dateinf AND l.datesup<=$datesup) OR (l.dateinf>=$dateinf AND l.datesup<=$datesup))";}
if($dateinf<>''&&$datesup==''){$sql.=" AND (l.datesup>=$dateinf)";}
if($dateinf==''&&$datesup<>''){$sql.=" AND (l.dateinf<=$datesup)";} 
Remplace les $datesup par '$datesup' et $dateinf par '$dateinf' dans ta requête.
M'étonnerait pas que ce soit ça.
Lilive
Salamandre
Messages : 39
Inscription : 02 mars 2006, 09:50

Message par Lilive »

Malheureusement, je ne pense pas que ce soit cela, car ça plante même quand on laisse le formulaire vierge, c'est-à-dire quand tout ce qui est écrit avec "if" n'est pas pris en compte...
L'erreur serait avant ou après les "if"... :(
Je vais quand même tenter...
Lilive
Asumbaa
Tyrannosaurus Rex
Messages : 2411
Inscription : 08 déc. 2004, 20:07

Message par Asumbaa »

Lilive a écrit :L'ordre entre le GROUP BY et le ORDER BY a-t-il une importance ?
Oui, mais tu les as mis dans le bon ordre :)
Lilive
Salamandre
Messages : 39
Inscription : 02 mars 2006, 09:50

Message par Lilive »

Alleluia ! :D
Voici le message retourné par mySQL :
erreur : #1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and
(latin1_general_ci,IMPLICIT) for operation '='

Eh oui !... C'est encore un problème d'encodage !
Nous avions copié la base en ligne sur un poste en local sans faire attention que easyPHP nous proposait un encodage extrêment... inadapté. Pour une raison étrange, certains champs étaient restés en latin1 alors que les autres bénéficiaient d'un petit voyage vers la Suède...

Vraiment, c'est pénible ces histoires d'encodage ! :x
Mais bon, j'ai changé tous les encodages suédois en UTF8 (champs, tables et base), et ça tourne parfaitement... mais quelle galère quand même !
En tout cas, merci à vous pour vos conseils : c'est de poser la requête en SQL, comme suggéré, qui m'a permis de comprendre... :wink:
Lilive
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité