Requete MySQL fausse ?

Résolu/Fermé
billou87 - 17 août 2009 à 17:39
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 - 18 août 2009 à 18:03
Bonjour,

Voici ma requête MySQL, dans une page PHP :

$query = mysql_query("SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT '".$nombre."', '".$limite."'");

Le navigateur m'indique l'erreur suivante : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/is/public_html/dominnov/admin/commandes.php on line 85

Ce qui veut dire que ma requête n'est pas valide, pourtant j'ai beau cherché, je ne trouve aucune erreur ! Aurai-je cumulé trop d'option de tri ? Un problème avec les quotes ?

Merci d'avance !
A voir également:

13 réponses

giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
17 août 2009 à 17:52
bonsoir,

non l'erreur est sur l'instruction où se trouve mysql_fetch_array
0
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
17 août 2009 à 22:12
Ton navigateur te renvoie cette erreur parce que la requete elle meme ne renvoie rien.
$query = mysql_query("SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT '$nombre', '$limite');

Toutes mes requetes sont de cette sorte, sans concaténer. Quand PHP lira cette variable il va te renvoyer LIMIT '5', '100'
Je crois...que c'est logique

Dis moi si ça fonctionne.
Ps : pk tu as besoin DATE_FORMAT ? Ta date est stockée comment.?
0
J'ai testé plusieurs sorte de requête, et tenté un mysql_error() pour voir d'où l'erreur provient et elle provient de la concaténation des variables (j'ai testé seulement avec les chiffres et ça fonctionne. Le problème vient donc des quotes, ou des points de concaténation, je ne sais pas. Je tatonne différentes syntaxes mais sans aucun résultat ! Ca ne m'arrange evidemment pas du tout de ne pas mettre de variables ( pas très dynamique sinon ).
Sinon ma date est stockée dans la table commandes, et correspond à l'heure d'ajout des données d'une ligne.
Concernant DATE_FORMAT, le developpeur précédent a préféré formaté l'heure à sa manière mais je ne vois pas en quoi cela pourrait gêné, si c'est cela que tu voulais insinuer.

Merci encore pr la réponse !
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
18 août 2009 à 10:21
bonjour

enlever les quotes autour des chiffres nomùbre et limite

$query = mysql_query("SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT ".$nombre.",".$limite.");
0

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

Posez votre question
Giheiler -> j'ai essayé ta requête (j'y ai rajouté une quote manquante à la fin !) ce qui donne :

$query = mysql_query("SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT ".$nombre.",".$limite."");

Malheuresement, cela ne marche toujours pas et oici le message d'erreur récupéré :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Pas très précis pour le coup, je ne vois pas de quelle quote il parle ! Cette requête commence sérieusement à m'agacer !
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
18 août 2009 à 11:06
alors on la découpe

$req = "SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT ".$nombre.",".$limite.";

$query = mysql_query($req);


J-L
0
Giheller -> ça ne fonctionne toujours pas, et j'ai l'impression qu'on a juste déplacer le problème
En fouillant un peu ce matin, j'ai pu trouver le code du message d'erreur : 1064, apparemment un problème de syntaxe ou de classement de ma base.
Concernant le classement, il est en utf8_unicode, donc il ne devrait pas y avoir de blème de ce côté là, j'essaie maintenant de voir le php autour mais tout me semble normal .... Aurais-je manqué quelque chose .....
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
18 août 2009 à 12:07
la requête fonctionne-t-elle en la passant dans phpmyadmin ?
0
Oui ! J'ai déjà essayé dans phpmyadmin (et sans evidemment) la requête, sans les variables et je n'ai eu aucun soucis ! Les variables sont pourtant instanciées et définies dès le début de mon code php.
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
18 août 2009 à 14:59
alors essaie en recomposant ta requête morceau par morceau ( ca d pas la totalité de la requête) jusqu'à voir la partie qui débloque.

1
$req = "SELECT *,COUNT(id_prod) as count"; // ce count nemettrait-il pas la grouille
$query = mysql_query($req);

2
$req = "SELECT *,COUNT(id_prod) as count, DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes ";
$query = mysql_query($req);

3
$req = "SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes;
$query = mysql_query($req);

0
Toutes fonctionnent ! Y compris avec le LIMIT sans les variables ! Dès que j'y mets les variables représentant la premiere instance affichée et le nombre de résultats affichés, il m'affiche la même erreur 1064 :S
0
Problème résolu ^^ ! Voici la solution !(enfin ca me mets plus d'erreur donc je suppose que c'est juste)

$req = "SELECT *,COUNT(id_prod) as count,DATE_FORMAT(date,'%d.%m.%Y %H\h%i') as date_fr FROM commandes GROUP BY no_facture ORDER BY id_commandes DESC LIMIT ".(int)$limite.", ".(int)$nombre."";

De ce que je comprend, la concaténation provoque un changement implicite de type de données, passant de int à string , d'ou le "forçage" vers le type int. (corrigez moi si je me trompe). En tout cas ça fonctionne, et ça..... ça n'a pas de prix :D
0
moderno31 Messages postés 870 Date d'inscription mardi 23 juin 2009 Statut Membre Dernière intervention 8 août 2012 92
18 août 2009 à 18:03
changement de type de données dans mysql ? ça m'étonne ça
Mais tant mieux si cela fonctionne de ton coté.
0