2010-09-11 5 views
0

Pourquoi cela me donne une erreur de syntaxe MySQL:erreur de syntaxe étrange dans MySQL

<cfset arguments.where = "platformUrlId='#params.platformUrlId#'"> 

SELECT * 
FROM whatever 
WHERE #arguments.where# 
Order By #arguments.order# 

Mais cela fonctionne parfaitement bien?

<cfset arguments.where = "0=0"> 

SELECT * 
FROM whatever 
WHERE #arguments.where# 
Order By #arguments.order# 

Ce n'est pas parce que je me param l'objet d'un dumping à côté d'un param jumeau que je tapais, et ils correspondent à ... passer la chaîne fonctionne directement, mais le réglage de la chaîne dans un argument puis en utilisant l'argument qu'il casse

EDIT: la sortie d'erreur montre platformUrlId=''playstation3'' Coldufsion ajoute '' autour du nom de l'argument. Comment venir?

+0

Ne devriez-vous pas utiliser 'ORDER BY' ici, au lieu de' ORDER'? –

+0

Daniel, désolé, je n'ai pas copié/collé. J'ai tapé cette partie dehors; mon code dit ORDER BY – Mohamad

+0

C'est une question fantastique, pardonnez mon français. Aucune requête SQL, ni message d'erreur. Et après tout, pas même un vrai code, mais un brouillon rapide. –

Répondre

1

Afin d'éviter des problèmes lors de votre variable CONTIENT LE someting comme « Runniers de minuit de Dexy », FC échappe implicitement des guillemets simples dans CFQUERY. Vous pouvez empêcher cela en utilisant preserveSingleQuotes(). Cependant, ce que vous faites n'est certainement pas une pratique recommandée. Si vous avez besoin d'écrire cela en tant que fonction, je ferais quelque chose de plus en passant dans un tableau de paires clé/valeur, et en utilisant cfQueryParam pour empêcher toute injection SQL.

1

Vous pourriez probablement mieux utiliser la balise cfqueryparam comme ceci:

<cfquery> 
    SELECT * 
    FROM tbl 
    WHERE #arguments.colname# = <cfqueryparam value="#arguments.platformUrlId#"> 
    ORDER BY #arguments.order# 
</cfquery>