Page 1 sur 1

Petite Erreur de syntaxe SQL difficilement décelable

Posté : 21 juil. 2011, 18:13
par hgus
Bonsoir,

Je viens vers vous car je n'arrive pas à trouver ce petit

bug bien gênant :

Sur un forum phpBB 3.0.9, j'ai installé un Mod, une shoutbox

(breizh shoutbox 1.4.0).

La shoutbox fonctionne très bien, sauf que pour les

visiteurs non-connectés il apparait une erreur SQL de

syntaxe apparemment. Sauf qu'il n'y a pa l'air d'en avoir

...
Une fois connecté, l'erreur disparait.

J'ai vu ici et là que je ne suis pas le seul, seulement je

n'ai pas trouver de réponse ... c'est bien dommage !

erreur :

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 ') OR s.shout_forum = 0 ORDER BY

s.shout_id DESC LIMIT 20' at line 4

Mais que se passe-t-il ?

Je pense que certains on trouvé ... Merci de m'aider !

voici le code php de la requête :

$sql = 'SELECT s.*, u.user_id, u.user_colour, u.username,

u.user_avatar, u.user_avatar_type, u.user_avatar_width,

u.user_avatar_height
FROM ' .$_table. ' AS s
LEFT JOIN ' . USERS_TABLE . " AS u ON s.shout_user_id =

u.user_id
WHERE " .$db->sql_in_set('s.shout_forum', array_keys($auth-

>acl_getf('f_read', true))). " OR s.shout_forum = 0
ORDER BY s.shout_id DESC";


Je ne sais pas comment récupérer la requête entière ... en

SQL débug ? avec mysqld ? mais je ne suis pas en local et

n'ai pas la main sur les équipements, à part en phpMyadmnin

...

Il y a un moyen ?

Merci d'avance pour votre aide !

version MySQL 5.1.51
PHP Version 5.2.13
Server API Apache

ugo

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 21 juil. 2011, 21:43
par Cyrano
Je te suggère l'utilisation de Notepad++ pour l'écriture de tes requêtes SQL, avec la coloration syntaxique, tu aurais rapidement détecté l'erreur.

Observe bien : tu as écrit ceci :
SELECT s.*, u.user_id, u.user_colour, u.username, 

u.user_avatar, u.user_avatar_type, u.user_avatar_width, 

u.user_avatar_height
FROM ' .$_table. ' AS s
LEFT JOIN ' . USERS_TABLE . " AS u ON s.shout_user_id = 

u.user_id
WHERE " .$db->sql_in_set('s.shout_forum', array_keys($auth-

>acl_getf('f_read', true))). " OR s.shout_forum = 0
ORDER BY s.shout_id DESC
Et maintenant remettons un peu d'ordre, ça donne :
SELECT
  s.*,
  u.user_id,
  u.user_colour,
  u.username, 
  u.user_avatar,
  u.user_avatar_type,
  u.user_avatar_width, 
  u.user_avatar_height
FROM ". $_table ." AS s
  LEFT JOIN ". USERS_TABLE ." AS u ON s.shout_user_id = u.user_id
WHERE ". $db->sql_in_set('s.shout_forum', array_keys($auth->acl_getf('f_read', true))) . "
   OR s.shout_forum = 0
ORDER BY s.shout_id DESC
Et comme tu peux le constater, il y a des différences de coloration à partir d'un endroit précis... que je te laisse le soin de trouver ;)

Un détail, prend l'habitude d'utiliser la barre d'outil et les boutons appropriés lorsque tu postes du code. Autre bonne habitude à prendre : ne pas écrire du code en vrac, un minimum d'ordre et de discipline, en alignant un peu tout ça, ça devient tout de suite plus facile à lire... et à déboguer.

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 22 juil. 2011, 17:39
par hgus
Bonjour !

Merci 1000 fois de prendre le temps de me répondre ...
J'ai donc copier-coller avec la nouvelle syntaxe, mais l'erreur est toujours la même.
En fait j'avais pas fais attention il y a deux erreurs successives, la 2ème s'écrit sur la même ligne, donc je ne vois plus que la 2eme .
Mais j'ai eu le temps de noter cette 1ère erreur, qui correspond à une autre requête, mais à la même chose.

1ère erreur : ... version for the right syntax to use near ') OR shout_forum = 0' at line 3
code php :
$sql = 'SELECT COUNT(shout_id) as nr 
			FROM ' . $_table. "
			WHERE " .$db->sql_in_set('shout_forum', array_keys($auth->acl_getf('f_read', true))). " OR shout_forum = 0";
		$result = $db->sql_query($sql);
Et pour la 2ème, avec la nouvelle syntaxe proposée : the right syntax to use near ') OR s.shout_forum = 0 ORDER BY s.shout_id DESC LIMIT 20' at line 12
$sql ="SELECT
  s.*,
  u.user_id,
  u.user_colour,
  u.username,
  u.user_avatar,
  u.user_avatar_type,
  u.user_avatar_width,
  u.user_avatar_height
FROM ". $_table ." AS s
  LEFT JOIN ". USERS_TABLE ." AS u ON s.shout_user_id = u.user_id
WHERE ". $db->sql_in_set('s.shout_forum', array_keys($auth->acl_getf('f_read', true))) . "
   OR s.shout_forum = 0
ORDER BY s.shout_id DESC";
Je pense que c'est "sql_in_set" qui renvoie une mauvaise valeur, non ?
Comment savoir ? est-ce que du coté serveur je peux accéder à un fichier log d'erreur, ou avec mysqld, mais il faut les autorisations ...

Je suis perdu du coup !

ugo

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 22 juil. 2011, 18:06
par Cyrano
Il y a des chances effectivement.

Et il y a peut-être aussi un retour de ligne mal pris. Donc voici comment personnnellement j'écris mon code de requêtes :
$sql ="SELECT ".
      "  s.*, ".
      "  u.user_id, ".
      "  u.user_colour, ".
      "  u.username, ".
      "  u.user_avatar, ".
      "  u.user_avatar_type, ".
      "  u.user_avatar_width, ".
      "  u.user_avatar_height ".
      "FROM ". $_table ." AS s ".
      "  LEFT JOIN ". USERS_TABLE ." AS u ON s.shout_user_id = u.user_id ".
      "WHERE ". $db->sql_in_set('s.shout_forum', array_keys($auth->acl_getf('f_read', true))) . " ".
      "   OR s.shout_forum = 0 ".
      "ORDER BY s.shout_id DESC";
Concaténation de chaines en prenant soin de toujours laisser un espace en fin de chaque ligne.

Pour vérifier, fais afficher la requête avant de l'exécuter en mettant quelque chose comme ceci juste après la création de la requête :
echo("<pre>Requête SQL :\n");
var_dump($sql);
echo("</pre>\n");

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 22 juil. 2011, 22:56
par hgus
Bonsoir,

Alors j'ai tenté avec cette syntaxe, toujours le même message d'erreur.
J'ai tenté l'affichage de la requête (en plaçant le code avant ou après), rien ne s'affiche, bizarre !

Du coup mystère !

ugo

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 00:59
par Cyrano
Mets donc ici le code que tu as utilisé histoire qu'on détecte ce qui se passe...

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 07:53
par hgus
Bonjour,

Le code, toute la page ?
Sinon le bout de code que vous m'avez suggérez j'ai mis ça :
$sql ="SELECT ".
      "  s.*, ".
      "  u.user_id, ".
      "  u.user_colour, ".
      "  u.username, ".
      "  u.user_avatar, ".
      "  u.user_avatar_type, ".
      "  u.user_avatar_width, ".
      "  u.user_avatar_height ".
      "FROM ". $_table ." AS s ".
      "  LEFT JOIN ". USERS_TABLE ." AS u ON s.shout_user_id = u.user_id ".
      "WHERE ". $db->sql_in_set('s.shout_forum', array_keys($auth->acl_getf('f_read', true))) . " ".
      "   OR s.shout_forum = 0 ".
      "ORDER BY s.shout_id DESC";
echo("<pre>Requête SQL :\n");
var_dump($sql);
echo("</pre>\n");
J'ai tenté l'echo avant, rien non plus.

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 09:58
par Cyrano
S'il ne s'affiche rien, alors c'est que tu n'appelles pas la bonne page dans ton navigateur, je ne vois pas d'autre alternative :-k

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 14:23
par hgus
Effectivement, la page contenant ce code n'est pas la page "appelée", elle est appelée par une autre, qui elle même détient une autre variable $sql, donc je ne sais comment faire ...

That's the question

ugo

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 18:13
par Cyrano
Ugo, il y a un point crucial qu'il me semble important que tu assimiles : la programmation, ça n'a rien à voir avec la magie ou le hasard, on ne met pas au hasard quelques lignes de code en espérant que ça va marcher.

Donc, si tu veux obtenir un résultat précis par rapport à des critères tout aussi précis, il va falloir impérativement que tu admettes l'idée qu'il faut faire preuve de rigueur et de discipline. Lorsque tu poses une question, essaye de te mettre à la place de celui qui va lire ta question et tenter d'imaginer ce qu'il peut faire à partir des éléments que tu lui fournis. En l'occurrence, je n'ai, de toute évidence, pas les éléments nécessaires pour comprendre correctement ce qui se passe avec ton code parce que tu as omis certaines parties pourtant essentielles.

Donne donc les éléments complets et on aura une chance de pouvoir te montrer où se trouve l'erreur voire peut-être la manière de la corriger, sinon an va perdre un temps considérable en pure perte pour tout le monde.

Re: Petite Erreur de syntaxe SQL difficilement décelable

Posté : 23 juil. 2011, 18:52
par hgus
Petit message rapide :
J'ai bien conscience de tout cela, effectivement tu as raison.

J'en prends note, et vais revenir avec une formulation plus complète

Merci à toi

ugo