Pb syntaxe sql - SQL/NoSQL - Programmation
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 .
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....
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?
Marsh Posté le 31-01-2006 à 09:44:50
non t'inquiète $id contient un nom c'est juste pour un test.....
Marsh Posté le 31-01-2006 à 13:01:10
et si t'écris $query2 = "select * from client where [\"NOM du client\"]='".$id."'";
Marsh Posté le 31-01-2006 à 14:10:16
marche pas........ sa renvoie aucune ligne, fais ch$^*é!!
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?
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]
Marsh Posté le 06-02-2006 à 16:13:57
t'es sur que "nom du client" du doi le metre entre crochet ?
Marsh Posté le 06-02-2006 à 17:50:55
SnupS a écrit : voila sa donne sa |
et avec des ' ' ca marche pas mieux ?
select * from client where [Nom du client]='RESIDENCE GEORGES ROSSET'
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...
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
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 ?
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 : |
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."'";
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 ...
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!
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 ?
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
Marsh Posté le 07-02-2006 à 13:02:28
balance ton code, si ça tombe y'a un souci ailleurs
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.
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;
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...... |
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 ...
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."'";
Marsh Posté le 07-02-2006 à 16:56:16
jeoff a écrit : |
vu
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é..
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 ?
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?
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
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 ?
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....
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 ?
Marsh Posté le 09-02-2006 à 16:27:30
ReplyMarsh 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
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!