[résolu] Requête SQL qui passe en ligne mais pas en local
[résolu] Requête SQL qui passe en ligne mais pas en local
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)
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
Voici le code complet :
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...
Merci de ton attention.
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);
En espérant que tu pourras me dépanner...

Lilive
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.
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.
Voir ma configuration
Stop. Cherche plus.Remplace les $datesup par '$datesup' et $dateinf par '$dateinf' dans ta requête.
M'étonnerait pas que ce soit ça.
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)";}
M'étonnerait pas que ce soit ça.
Oui, mais tu les as mis dans le bon ordreLilive a écrit :L'ordre entre le GROUP BY et le ORDER BY a-t-il une importance ?

Voir ma configuration
Alleluia !
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 !
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...

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 !

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...

Lilive
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités