Pb syntaxe sql

Pb syntaxe sql - SQL/NoSQL - Programmation

Marsh Posté le 30-01-2006 à 14:50:49    

Rebonjour, voila mon pb  
 
$query2 = "select * from client where [NOM du client]='".$id."'";
 
cette requete ne renvoie rien, je suis en PHP et elle va cherché une base ACCESS, je précise que c'est le where qui merdouille et plus precisement [NOM du client] qui n'est pas reconnu car quand j'essai avec un champs constitué d'un seul mot sa marche
Si quelqu'un peut m'indiquer la syntaxe exacte....
merci!

Reply

Marsh Posté le 30-01-2006 à 14:50:49   

Reply

Marsh Posté le 30-01-2006 à 15:01:14    

un peu d'aide svp....

Reply

Marsh Posté le 30-01-2006 à 16:16:41    

Pour éviter ce genre de problèmes, préfere les noms de base/table/champs sans espace ni caractères spéciaux lorsque tu crée ta structure.
 
Ca évite de perdre du temps par la suite comme tu es en train de la faire.
 
On se doute bien que le "NOM du client" de la table client correspond au nom d'un client. Tu décris l'évidence ;).
 
Contente toi de nommer le champs "NOM" tout simplement.
$query2 = "select * from client where [NOM]='".$id."'";  
 
C'est tout aussi compréhensible :).

Reply

Marsh Posté le 31-01-2006 à 08:51:42    

arf je me douté bien qu'on allé me répondre sa mais je ne peux pas modifier la table, je la récupère ainsi! voila un autre probleme....

Reply

Marsh Posté le 31-01-2006 à 09:13:59    

Une question comme ça. C'est normal de faire [Nom...] = id? id, ici, est sûrement la clé primaire du client, donc probablement un entier. Pour le champ Nom, on attendrait plutôt un truc du genre [Nom...] = "dupont" ou [Nom...] like "%dupont%", non?

Reply

Marsh Posté le 31-01-2006 à 09:44:50    

non t'inquiète $id contient un nom c'est juste pour un test.....

Reply

Marsh Posté le 31-01-2006 à 13:01:10    

et si t'écris $query2 = "select * from client where [\"NOM du client\"]='".$id."'";

Reply

Marsh Posté le 31-01-2006 à 14:07:22    

je vais essayer sa...

Reply

Marsh Posté le 31-01-2006 à 14:10:16    

marche pas........ sa renvoie aucune ligne, fais ch$^*é!!

Reply

Marsh Posté le 31-01-2006 à 16:06:12    

tu pourrais nous montrer un exemple de requête que tu fais en "dur" (un nom à la place du $id), svp?

Reply

Marsh Posté le 31-01-2006 à 16:06:12   

Reply

Marsh Posté le 03-02-2006 à 11:37:19    

voila sa donne sa  
 
select * from client where [Nom du client]=RESIDENCE GEORGES ROSSET
 
mais sa ne renvoi aucune ligne car il comprend pas la champ : [Nom du client]

Reply

Marsh Posté le 03-02-2006 à 14:13:34    

rufo est attendu au rayon sql, rufo au rayon sql svp :-)

Reply

Marsh Posté le 06-02-2006 à 15:51:52    

up svp y'a bien quelqu'un qui peut m'aider..........

Reply

Marsh Posté le 06-02-2006 à 16:13:57    

t'es sur que "nom du client" du doi le metre entre crochet ?

Reply

Marsh Posté le 06-02-2006 à 17:50:55    

SnupS a écrit :

voila sa donne sa  
 
select * from client where [Nom du client]=RESIDENCE GEORGES ROSSET
 
mais sa ne renvoi aucune ligne car il comprend pas la champ : [Nom du client]


 
et avec des ' ' ca marche pas mieux ?
 
select * from client where [Nom du client]='RESIDENCE GEORGES ROSSET'


Message édité par jeoff le 06-02-2006 à 17:51:10
Reply

Marsh Posté le 07-02-2006 à 09:04:15    

justement je suis pas sur des crochets j'ai tout essayé ", [, \ mais je ne trouve pas la syntaxe! par contre quand je cherche une ligne avec un champs en 1 mot (donc pas d'espace) je retrouve bien ma ligne.....
c'est les espace qui me chie tout...

Reply

Marsh Posté le 07-02-2006 à 09:54:36    

Et ya pas moyen de spécifier les caractères spéciaux sous access ?
 
Un peu comme %20 pour les espaces en HTML ?
 
EDIT voir msg plus bas


Message édité par jeoff le 07-02-2006 à 10:05:24
Reply

Marsh Posté le 07-02-2006 à 09:57:18    

et t'as pas essayé avec les quotes comme jeoff l'a indiqué ? là tu cherche une chaine, faut bien la délimiter non ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 07-02-2006 à 10:04:01    

Pourrais-tu configurer une connexion ODBC sur cette base et balancer ta requête dessus via une console SQL (on a SQL view au boulot mais ya ptet mieux).
 
Une fois que tu as balancé ta requête, revient ici avec le message d'erreur si erreur il y a parceque je viens de tomber sur ça donc j'ai l'impression qu'on ne cherche pas au bon endroit. Si ca se trouve la requête est correcte mais renvoie un recordset vide.
 

Citation :


Access permet d’utiliser les espaces dans le nom des champs. On en a parfaitement le droit.  Mais c’est déconseillé car cette possibilité se paiera plus tard avec la saisie obligatoire de crochets partout dans l’application.
Or les crochets sont assez fastidieux à saisir avec un clavier AZERTY.
 
Il est astucieux d’éviter les espaces et de rester lisible en n’utilisant que des minuscules et des initiales majuscules au début des mots :
ObjectifSaisiEtContrôlé, par exemple.

Reply

Marsh Posté le 07-02-2006 à 10:20:38    

oui oui sa me renvoi "No tuple available etc etc"  
C'est juste a mon avis soi access qui n'arrive pas a interpreter Nom du client ou alors linux.... mais jconné rien a linux alors....
 
ps: pour les quote voir mon 1er post y'a bien la delimitation :
 
$query2 = "select * from client where [NOM du client]='".$id."'";  


Message édité par SnupS le 07-02-2006 à 10:22:34
Reply

Marsh Posté le 07-02-2006 à 10:38:19    

Tu peux attaquer la base en local ou sur un poste windows ?
 
Essaye une MAJ de ton ODBC.
 
Je viens de créer une base access 'client' en local, un seul champs 'nom du client' et un seul enregistrement 'RESIDENCE GEORGES ROSSET'.
 
Ta requête fonctionne ...

Message cité 1 fois
Message édité par jeoff le 07-02-2006 à 10:39:20
Reply

Marsh Posté le 07-02-2006 à 11:06:30    

oui mais tu l'attaque sous une page php d'un poste distant sur un serveur linux?
parce que j'ai l'impression que c'est une question d'interpretation, de qui jene c'est pas mais de toute facon quand je tape ma requête directement sous access elle fonctionne aussi......
 
ps: je viens de trouver autre chose, impossible de claquer un ORDER BY la requete ne fonctionne plus.....
 
ke mizère min garchon!

Message cité 1 fois
Message édité par SnupS le 07-02-2006 à 11:09:29
Reply

Marsh Posté le 07-02-2006 à 11:22:09    

Ok donc je pense que ton soucis c'est PHP, j'y connais rien là desolé.
Tu tournes sur la dernière version ?

Reply

Marsh Posté le 07-02-2006 à 11:27:20    

oép PHP 5 et des poussières
 
merci pour ton aide jeoff! c'est sympa mais faut que tu bosse un peu
quand même lol

Reply

Marsh Posté le 07-02-2006 à 13:02:28    

balance ton code, si ça tombe y'a un souci ailleurs :)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 07-02-2006 à 14:18:45    

le code c'est ce que j'ai dans mon 1er post :
 
 
$query2 = "select * from client where [NOM du client]='".$id."'";  
 
si j'écrit sa :
 
$query2 = "select * from client where plan='test'";
 
sa marche donc le probleme vient du champ NOM du client qui n'est pas reconnu ou mal interprété soit pas ACCESS, soit par linux je n'en sait rien.
 

Reply

Marsh Posté le 07-02-2006 à 15:14:11    

Y'a pas moyen que tu construises directement la requete sous Acces pour voir ce qu'il te donne comme syntaxe SQL. Ce serait plus simple;


---------------
MZP est de retour
Reply

Marsh Posté le 07-02-2006 à 16:01:33    

cinocks a écrit :

Y'a pas moyen que tu construises directement la requete sous Acces pour voir ce qu'il te donne comme syntaxe SQL. Ce serait plus simple;


 

SnupS a écrit :

mais de toute facon quand je tape ma requête directement sous access elle fonctionne aussi......


 
 :o
 
Si je dis pas de bétises, Php ne passe pas par ODBC pour attaquer la base donc le soucis se situe plutôt au niveau de PHP ...  :)

Message cité 1 fois
Message édité par jeoff le 07-02-2006 à 16:03:17
Reply

Marsh Posté le 07-02-2006 à 16:08:22    

Quand tu dis avoir essayé avec un nom de champs sans espace, tu as utilisé quelle syntaxe :
$query2 = "select * from client where [NOM]='".$id."'";
$query2 = "select * from client where NOM='".$id."'";
 
Si tu n'a pas testé avec les [], regarde par là ou cherche quelque chose d'approchant. Il se peut que php interprête mal les [].
http://fr2.php.net/mysql_real_escape_string
 
sinon, essaye ça mais il me semble que tu as déjà essayé
$query2 = "select * from client where \[NOM du client\]='".$id."'";


Message édité par jeoff le 07-02-2006 à 16:15:24
Reply

Marsh Posté le 07-02-2006 à 16:56:16    

jeoff a écrit :

:o
 
Si je dis pas de bétises, Php ne passe pas par ODBC pour attaquer la base donc le soucis se situe plutôt au niveau de PHP ...  :)


 
vu


---------------
MZP est de retour
Reply

Marsh Posté le 08-02-2006 à 09:21:41    

oép deja essayé jeoff, sa ne marche pas... je vais regardé un peu ce que tu m'a filé..

Reply

Marsh Posté le 08-02-2006 à 09:54:54    

et en protégeant les champs avec des ` (utilisé avec MySQL, mais sait-on jamais)
 
si access supporte les alias, t'as essayé aussi ?


Message édité par Sh@rdar le 08-02-2006 à 09:59:54

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 08-02-2006 à 10:48:16    

marche pas avec les `
 
select * from client where `NOM du client`='ABATTOIR LEMAITRE ET CARIOT'
Warning: odbc_result() [function.odbc-result]: No tuples available at this result index in /var/www/stage/catalog/client.php on line 142
 
connais pas les alias tu peux m'expliquer?


Message édité par SnupS le 08-02-2006 à 10:52:23
Reply

Marsh Posté le 08-02-2006 à 10:58:43    

tu crée un alias du champ pour le nommer différemment
 
à mon avis c'est cuit ton truc, si tu peux pas retirer ces espaces t'es foutu :(


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 08-02-2006 à 11:11:17    

La syntaxe avec les crochets est la bonne pour MSAccess.
Je crains que ça ne soit PHP qui les transforme à la volée en autre chose
Mais d'un autre côté je suis étonné qu'aucune erreur ne soit récupérée. Si les crochets sont changés par PHP, MSAccess ne doit plus reconnaître le nom du champ et donc renvoyer une erreur.
PHP récupère-il bien les erreurs de requetes SQL pour MSAccess ?
 

Reply

Marsh Posté le 08-02-2006 à 13:20:01    

euh.......... tu peux répéter la question stp?
 
sinon l'erreur c'est celle du dessus comme il interprete mal le champ, il me renvoi une erreur me disant que la requête ne renvoi pas de ligne....

Reply

Marsh Posté le 09-02-2006 à 13:21:10    

up up a la recherche d'un pro de la syntaxe....

Reply

Marsh Posté le 09-02-2006 à 15:49:35    

ça me semble étrange d'avoir une erreur pour une requête correctement exécutée mais qui ne retourne rien :??:
 
c'est le comportement normal d'access/odbc ?


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 09-02-2006 à 16:27:30    

je ne sait pas........ malheureusement

Reply

Marsh Posté le 13-02-2006 à 12:44:01    

SnupS a écrit :

je ne sait pas........ malheureusement


 
Pour ta requête sql, tu attaques la BD par les instructions ODBC de PHP directement ou tu passes par le lib Pear:DB?
 
Par contre, ça serait bien que tu utilises l'assistant de créations de requêtes sql d'access pour voir ce qu'il génère comme requête. Ca devrait t'aider.
 
ps : j'ai aps répondu plus car j'étais absent 1 semaine ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed