2013-05-04 1 views
0

Я помогал другу с сайта, над которым он работал. Он занимался обслуживанием веб-сайта ColdFusion. Он в основном является веб-дизайнером, а мой фон - asp.net.Попытка получить идентификатор из SQL с ColdFusion

Проблема, с которой я сталкиваюсь, заключается в том, что они хотят иметь возможность добавлять товар в корзину. Чтобы быстро выполнить это, я собирался использовать существующее действие «добавить в корзину». Проблема заключается в том, что сайт обычно использует скрытое поле с именем productId, но быстрый ввод использует ModelID.

Мой план состоял в том, чтобы получить productID с конца SQL, но каждый раз, когда я пытаюсь это сделать, вы получаете ошибку SQL. Странно то, что независимо от введенного номера модели сообщение об ошибке показывает другое число. Вот код

Быстрый вход HTML:

<form action="index.cfm?do=action" method="POST" NAME="quick"> 
    <b>Model Number:</b> 
    <input type="Text" name="QuickEntryModelNumber" value="" size="8">&nbsp;&nbsp;&nbsp; 
    <b>Quantity:</b> 
    <input type="Text" name="Quantity" value="" size="2" maxlength="3"><br> 
    <input type="hidden" name="wasWholesaler" value="#session.wholesaler#"> 
    <p align="right"><input type="Submit" name="action" value="Add to basket"></p> 
</form> 

Добавить в корзине действия:

<cfif structkeyexists(form,'ProductID')> 
    <cfparam name="inProductID" type="integer" default = 0> 
    <cfset inProductID = #form.ProductID#> 
<cfelse> 
    <cfparam name="inProductID" type="integer" default = 0> 
    <cfquery name="GetID" datasource="#attributes.dsn#"> 
    SELECT P.ProductID 
    FROM Products P 
    WHERE P.ModelNumber = #form.QuickEntryModelNumber# 
    </cfquery> 

    <cfoutput query="GetID"> 
    <cfset inProductID = #P.ProductID#> 
    </cfoutput> 
</cfif> 

В основном я проверял, чтобы увидеть, если ProductID существует в данной форме. Если не извлекать ProductId из БД. Ошибка он бросает это:

[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '088254PC' to data type int. 

Независимо от того, что вы вводите для модели ID, значение VARCHAR всегда '088254PC. Когда я беру запрос SQL и устанавливаю productId на статическое значение, он функционирует должным образом.

Я думаю, это было бы подходящее время, чтобы указать, что эта страница беспорядок. В разное время его затронули более 20 разных людей. Его нужно выбросить и начать с нуля. И у меня нет макета БД. Вздох. Любая помощь, которую вы, ребята, можете бросить мне, будет очень благодарна. ColdFusion - это не мое дело.

ответ

5

Вы должны заключите строку в кавычки, а еще лучше использовать cfqueryparam и ColdFusion будет заботиться о котировках для вас (и помогают предотвратить против инъекции SQL)

<cfparam name="inProductID" type="integer" default = 0> 
<cfquery name="GetID" datasource="#attributes.dsn#"> 
SELECT P.ProductID 
FROM Products P 
WHERE P.ModelNumber = <cfqueryparam cf_sql_type="cf_sql_varchar" value="#form.QuickEntryModelNumber#"> 
</cfquery> 

Вы может проездом целое в ваш запрос, но в базе данных уже есть значение varchar 088254PC, поэтому вы каждый раз видите ту же ошибку.

+0

Большое спасибо человеку. У меня на самом деле были котировки вокруг него в один момент времени, но SQL-запрос был неправильным. Но с вами совет я смог ограничить его запросом SQL и исправить его. Благодаря тонну. – bigcrav