Page 1 sur 1

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

Publié : 21 mars 2006, 11:46
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)

Publié : 21 mars 2006, 12:20
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" ?

Publié : 21 mars 2006, 13:48
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.

Publié : 21 mars 2006, 14:01
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.

Publié : 21 mars 2006, 14:15
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 ?

Publié : 21 mars 2006, 15:49
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.

Publié : 21 mars 2006, 16:00
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...

Publié : 21 mars 2006, 16:31
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 :)

Publié : 22 mars 2006, 17:29
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: