Странная синтаксическая ошибка в MySQL - PullRequest
0 голосов
/ 11 сентября 2010

Почему это дает мне синтаксическую ошибку MySQL:

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

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

Но это прекрасно работает?

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

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

Это не мой параметр, потому что я сбросил параметр рядом с близнецомчто я набрал, и они совпадают ... передача строки напрямую работает, но установка строки в аргументе, а затем использование аргумента прерывает его

РЕДАКТИРОВАТЬ: вывод ошибки показывает platformUrlId=''playstation3'' Coldufsion добавляет '' вокруг имени аргумента.Как получилось?

Ответы [ 2 ]

1 голос
/ 11 сентября 2010

Для предотвращения проблем, когда ваша переменная содержит что-то вроде «Полуночных бегущих по Dexy», CF неявно экранирует одинарные кавычки в CFQuery.Вы можете предотвратить это, используя preserveSingleQuotes ().

Однако то, что вы делаете, определенно не рекомендуется.Если вам нужно написать это как функцию, я бы сделал нечто большее, передавая массив пар ключ / значение и используя cfQueryParam, чтобы предотвратить любое внедрение SQL.

1 голос
/ 11 сентября 2010

Возможно, вам лучше использовать тег cfqueryparam , например:

<cfquery>
  SELECT *
  FROM tbl 
  WHERE #arguments.colname# = <cfqueryparam value="#arguments.platformUrlId#"> 
  ORDER BY #arguments.order#
</cfquery>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...