Почему MySQL ищет столбец с именем вставки значения

При выполнении cfquery для MySQL MYSQL выдает ошибку «Неизвестный столбец» «Вопрос» в «списке полей» в следующем коде:

<cfquery name="qUpdateTheQuestion" datasource="testmaster">
INSERT INTO ETrueFalseQuestions
VALUES (<cfoutput>#newTypeID#</cfoutput>, `<cfoutput>#FORM.Question#</cfoutput>`, <cfoutput>#FORM.truefalse#</cfoutput>

Я перепробовал все, что мог придумать, чтобы попытаться решить эту проблему, а также некоторые предложения, которые я нашел при поиске решения, такие как использование обратных кавычек вместо одинарных кавычек.

Я также не понимаю, почему он ищет столбец с именем Question, поскольку это значение FORM.Question и изменяется в зависимости от того, что вводится в форму. Любые предложения будут ценны.


person Computerman1597    schedule 26.03.2012    source источник
comment
Пожалуйста, заверните ваши переменные в cfqueryparam: <cfqueryparam value="#newTypeID#" cfsqltype="CF_SQL_INT" />, <cfqueryparam value="#FORM.question#" cfsqltype="CF_SQL_VARCHAR" />, <cfqueryparam value="#FORM.truefalse#" cfsqltype="CF_SQL_BIT" />   -  person Sean Walsh    schedule 26.03.2012
comment
Re: почему он ищет столбец с именем Question FORM.Question содержит строку. Литеральные строки должны быть заключены в одинарные кавычки (или заключены в cfqueryparam), в противном случае ваша база данных предполагает, что это имя объекта, т.е. имя столбца или таблицы. Кроме того, вам никогда не понадобятся теги cfoutput в cfquery.   -  person Leigh    schedule 26.03.2012
comment
Использовал cfqueryparam, но есть ли в этом какое-то преимущество перед использованием переменных?   -  person Computerman1597    schedule 26.03.2012
comment
cfqueryparam дает следующие преимущества: защита от атак с внедрением SQL и использование переменных связывания, что позволяет базе данных повторно использовать скомпилированные запросы и, таким образом, повысить производительность.   -  person ale    schedule 26.03.2012
comment
Используемые вами <cfoutput> также не нужны внутри тега cfquery.   -  person ale    schedule 26.03.2012
comment
Итак, является ли проблемой безопасности выбор всех полей, включая поле пароля, при входе пользователя в систему? Можно ли как-то это получить.   -  person Computerman1597    schedule 27.03.2012


Ответы (1)


этот запрос не имеет смысла для меня

обычно это должно выглядеть так

INSERT INTO ETrueFalseQuestions (IdColumnName, questionColumnName, questionTrueFalse)     
VALUES ( #newTypeID#, '#form.Question#', #form.truefalse# )

Так что вам нужно

  1. список столбцов
  2. не использовать <cfoutput> в <cfquery>
  3. поместите одинарные кавычки вокруг строковых значений или используйте <cfqueryparam>

PS: имена столбцов, которые я использовал, составлены, вам нужно исправить их, чтобы они соответствовали вашим.

person Dale Fraser    schedule 26.03.2012
comment
Я бы еще добавил то, что s992 упоминал выше. Используйте cfqueryparam. - person Scott Stroz; 26.03.2012
comment
то же самое с предложением Скотта и s992. - person Mark A Kruger; 26.03.2012