Format de requete SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Format de requete SQL

par ouckileou » 29 avr. 2008, 13:34

Modération :
tetaklak123hop, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Berzemus » 29 avr. 2008, 12:14

Code : Tout sélectionner

SELECT `SELECT` FROM `FROM` WHERE `WHERE`='WHERE' AND `AND`='AND'
Dés que tu utilises des noms de champs qui font partie de la syntaxe SQL et MySQL quoi.. ce qui est en soi une mauvaise habitude (et je me demande si c'est pas contraire aux standards SQL, puisque il me semble que il n'y a que MySQL pour utiliser cette notation.. du coup, ça gêne la portabilité.

par caroube » 29 avr. 2008, 12:07

Enfin, de toute facon, c'est une mauvaise habitude
Tout à fait.

Par contre les `sont obligatoires pour une requête

Code : Tout sélectionner

SELECT `SELECT` FROM `FROM` WHERE `WHERE`='WHERE' AND `AND`='AND'

par caroube » 29 avr. 2008, 12:01

Tu as résolu ton problème, mais pour une mauvaise raison
Tu avais ceci

Code : Tout sélectionner

'IdStation' = '$IdStation'
et tu es passé à ceci

Code : Tout sélectionner

`IdStation` = '$IdStation'
C'est pour cela que je te demandais de virer ces ` : tu es passé d'une quote droite (') à une quote inverse (`) autour de IdStation.

Dans le premier cas, tu testais si la chaîne de caractère 'IdStation' est égale à la chaîne de caractère '1' ou '3', ce qui est faux. Dans le deuxième cas, tu vérifies la valeur du champ IdStation.

par orgerix » 29 avr. 2008, 11:57

L'ordre de ne change rien.

Tu as juste remplacé les ' par des ` autour de IdStation, ce qui maintenant est corect.

@caroube : En effet ca marche, moi j'avais eu des problème avec force. Enfin, de toute facon, c'est une mauvaise habitude

par tetaklak123hop » 29 avr. 2008, 11:44

Alors j'ai trouvé une solution a mon probleme...

Dans ma table, il y a d abord l attribut IdStation, et apres, la date.

En reformulant ma requete comme cela, ca marche parfaitement

SELECT * FROM `historique` WHERE `IdStation` = '1' AND `Jour` BETWEEN '2007-01-01' AND '2010-01-01';

A force de mettre des `, des ' et des ", il est fatal qu'on ne puisse plus rien voir.

Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces. Ensuite, les ' ne sont absolument pas obligatoires autour des nombres (et je suppose que ton id est un nombre) : enlève les
Les ` sont ajoutés par Phpmyadmin lorsque je fais ma requete, donc en les laissant, ca marche parfaitement =)



Merci de votre patience =)

par caroube » 29 avr. 2008, 11:28

J'en suis pas si sur que ca...
La meilleure solution, c'est d'essayer :)

par orgerix » 29 avr. 2008, 11:22

Il faut enlever les guillement autour de Idstation, qui doit être un nom de champ
Tu peux tout à fait écrire en MySQL select date from date sans mettre de `
J'en suis pas si sur que ca...

par caroube » 29 avr. 2008, 10:30

je parlais du ; à la fin de la requête, pas du ; à la fin de la ligne php

ensuite, fais un echo de ta requête et pose toi la question si cette clause renvoie un résultat ou pas

Code : Tout sélectionner

AND 'IdStation' = 23
ou des noms réservés tels que "date"
Tu peux tout à fait écrire en MySQL select date from date sans mettre de `
Par contre, appeler un champ date, c'est non seulement une prise de risque avec la gestion des mots-réservés par le moteur du SGBD, mais c'est aussi un manque de précision dans la signification du champ. C'est comme si on appelait un champ "nombre" ou un champ "chaine" : Date, oui, mais date de quoi ? Pensons à celui qui va reprendre le code dans 1 an et qui va se demander : date de naissance, date de création, date d'enregistrement, date de fermeture, date de modification,... ?

par ouckileou » 29 avr. 2008, 10:25

Mon message il compte pas ? On peut avoir la requête générée ?

par tetaklak123hop » 29 avr. 2008, 10:18

J'ai supprimé tous les ' mais le ; est necessaire, car c'est une fin de ligne de code php, me semble t'il...

Et l'erreur doit encore etre planquée quelque part, vu qu'elle ne m'a pas sauté aux yeux...

Comme je t'ai dit, je soupçonne le BETWEEN... AND... de m'empecher d'y coller une condition supplémentaire...

par Truc » 29 avr. 2008, 10:18

Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces.
ou des noms réservés tels que "date" ;)

par caroube » 29 avr. 2008, 09:57

Code : Tout sélectionner

$requete="SELECT * FROM `historique` WHERE `Date` BETWEEN '$dateDebut' AND '$dateFin' AND 'IdStation' = '$IdStation' ;" ;
A force de mettre des `, des ' et des ", il est fatal qu'on ne puisse plus rien voir.

Commence d'abord par virer tous les ` : ils sont absolument inutiles, sauf si tu t'amuses à avoir des noms de champs ou de tables qui comportent des espaces. Ensuite, les ' ne sont absolument pas obligatoires autour des nombres (et je suppose que ton id est un nombre) : enlève les

Et tant que tu y es : le ; à la fin ne sert à rien.

Et ensuite, je pense que l'erreur te sautera aux yeux :)

par ouckileou » 29 avr. 2008, 09:31

Voir conseils de débuggage, point n°2 : http://www.phpfrance.com/forums/voir_sujet-19378.php

par tetaklak123hop » 29 avr. 2008, 09:26

Bonjour a tous =)

Ma requete, avec la syntaxe suivante ne fonctionne pas...

Code : Tout sélectionner

$requete="SELECT * FROM `historique` WHERE `Date` BETWEEN '$dateDebut' AND '$dateFin' AND 'IdStation' = '$IdStation' ;" ;

Il s'agit a mon avis de la présence du BETWEEN ... AND ...

J'ai cherché un peu a droite a gauche depuis hier, mais je galere toujours autant...