Help ! Erreur de syntaxe impossible à trouver

Eléphant du PHP | 95 Messages

27 mars 2006, 17:26

Bonjour,

Je m'arrache les cheveux depuis une heure mais je n'arrive pas à trouver où ma syntaxe pêche :

Code : Tout sélectionner

$strSQL= "SELECT * FROM clients WHERE clients.code_client IN (SELECT code_client FROM web WHERE type LIKE %,". $_POST['type'] . ",% AND specialite LIKE %,".$_POST['specialite'].",% AND fidelite=".$_POST['fidelite'].")";
Message d'erreur quand je teste sur une requête lambda :

Erreur de syntaxe près de 'SELECT code_client FROM web WHERE type LIKE %,7,% AND speciali' à la ligne 1

Quelqu'un a-t-il de meilleurs yeux que les miens !! ??

Merci par avance.
Je veux apprendre !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

27 mars 2006, 17:28

Commence déjà par afficher le SQL généré
echo $strSQL;
Il doit manquer des quotes autour de la valeur du LIKE :

Code : Tout sélectionner

LIKE '%,7,%'

Eléphant du PHP | 95 Messages

27 mars 2006, 17:36

J'ai mis les quotes et affiché le SQL comme conseillé mais cela ne m'avance pas plus (attention j'ai changé l'ordre des facteurs pour voir !) :

Code : Tout sélectionner

SELECT * FROM clients WHERE clients.code_client IN (SELECT code_client FROM web WHERE fidelite=1 AND type LIKE '%,7,%' AND specialite LIKE '%,1,%') Erreur de syntaxe près de 'SELECT code_client FROM web WHERE fidelite=1 AND type LIKE '' à la ligne 1
Je me demande si ce n'est pas la premiere partie de ma requête qui cloche :

Code : Tout sélectionner

SELECT * FROM clients WHERE clients.code_client IN ...
En attendant, je trouve que le debug du SQL laisse plutôt à désirer dans le couple PHP/MySQL !!
Je veux apprendre !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

28 mars 2006, 08:41

Quelle est la version de MySQL utilisée ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

28 mars 2006, 09:58

Il y a une astuce pour lire les messages d'erreur MySQL : le code SQL affiché commence à l'erreur détectée. Tu sais donc que ton erreur se situe juste avant ta sous-requete.

Code : Tout sélectionner

Erreur de syntaxe près de 'SELECT code_client FROM web WHERE type LIKE %,7,% AND speciali' à la ligne 1
Ensuite, comme le laisse entendre Ouckileou, les sous-requete ne sont pas gérées par toutes les versions de MySQL, ce qui explique très probablement ton problème ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 95 Messages

28 mars 2006, 15:01

Ma version de MySQL est 4.0.15. Merci Zeus et Ouckiléou : effectivement ça ne sert à rien de m'escrimer sur ce problème, si c'est tout simplement une histoire de compatibilité de version avec les sous-requêtes...

En regardant ma requete, il me semble impossible que l'erreur soit en plein milieu du nom de ma colonne.

Je dois dire que je ne suis modérément à l'aise avec le SQL. Existe-t-il un équivalent à ma requête sans utiliser de sous-requête...
Je veux apprendre !!

Eléphant du PHP | 95 Messages

28 mars 2006, 15:13

J'ai trouvé : il faut faire une jointure !! Je suis un peu à la ramasse aujourd'hui ! ;-)
L'info se trouve ici : http://dev.mysql.com/doc/refman/5.0/fr/ ... eries.html
Je veux apprendre !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

28 mars 2006, 16:13

Résolu alors ? :)