2010-02-02 5 views
0

Voici ma question:Erreur MySQL 1064, fonctionne en ligne de commande et phpMyAdmin; pas dans l'application

select * 
    from (select *, 3956 * 2 * ASIN(SQRT(POWER(SIN(RADIANS(45.5200077 - lat)/ 2), 2) + COS(RADIANS(45.5200077)) * COS(RADIANS(lat)) * POWER(SIN(RADIANS(-122.6942014 - lng)/2),2))) AS distance 
      from stops 
     order by distance, route asc) as p 
group by route, dir 
order by distance asc 
    limit 10 

Cela fonctionne bien à la ligne de commande et dans phpMyAdmin. J'utilise Dbslayer pour me connecter à MySQL via mon backend JavaScript, et la requête renvoie une erreur 1064.

Voici la chaîne de demande DBSlayer codé:

http://localhost:9090/db {% 22SQL% 22:% 22select% 20 *% 20from% 20% 28select% 20 *,% 203956% 20 *% 202% 20 *% 20ASIN% 28SQRT% 28POWER% 28SIN% 28RADIENS% 2845,5200077% 20% 20% 29%% 29% 20% 20COS% 28RADIENS% 2845,5200077% 29% 29% 20 % 28lat% 29% 29% 20 *% 20POWER% 28SIN% 28RADIENS% 28-122.6942014% 20-% 20lng% 29/2% 29,2% 29% 29% 29% 20AS% 20distance% 20de% 20% 60stops% 60 % 20order% 20by% 20% 60distance% 60,% 20% 60route% 60% 20asc% 29% 20as% 20p% 20group% 20par% 20% 60route% 60,% 20% 60dir% 60% 20order% 20par% 20% 60distance % 60% 20asc% 20limit% 2010% 22}

Et la réponse:

{ "mysql_errno": 1064, "mysql_error": « Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de (RADIANS (45.5200077)) * COS (RADIANS (lat)) * POWER (NAS (RADIANS (-122.6942014 - lng 'à la ligne 1 "," SERVEUR »: "TriMet"!}

Merci

+4

Marie mère de Dieu, qu'est-ce que c'est que ça? –

+0

Pas la plus jolie des questions, je sais. Mais c'est ma première passe :). –

+1

"il semblait vraiment cool d'avoir une couche de DB parlant JSON que tout notre contenu scriptable pourrait parler." et "Adaptateur MySQL (d'autres possibles dans le futur)". assez dit. –

Répondre

0

Une source possible de votre problème est le codage de l'URL Je vois que l'opérateur plus est transmis tel quel. dangereux, car + utilisé pour signifier l'espace dans le codage traditionnel. http://www.faqs.org/rfcs/rfc1738

+0

C'était ça! J'ai échangé l'encodeURI pour encodeURIComponent (ne savais pas à propos de celui-ci) et cela a fait l'affaire! Merci! –

0
...distance%60%20asc%20... 

Comment sont Echapper à la sql on dirait que vous manquez la "route", de sorte que le lit ci-dessus "distance, asc". On dirait que ça descend à partir de là

+0

object = {SQL: "la requête"}; request = connection.request ('GET', '/ db?' + EncodeURI (JSON.stringify (objet)), {'host': this.host}) –

+0

La partie que j'ai retirée n'est peut-être pas le problème (bien qu'il soit vraiment difficile de lire tous les codes échappés), mais si la version non échappée fonctionne après que vous l'ayez décodée manuellement, alors le décodeur ne fait pas la conversion correctement. Ou au moins je commencerais sur cette hypothèse. Si ce n'est pas le cas, alors c'est probablement un bug dans dbslayer. Si ce n'est pas ça, alors c'est juste MySQL qui te déteste pour avoir émis cette requête;) –

+0

Le "+" pourrait être tout à fait ça! Cela devrait être un "% 2B". –

Questions connexes