尝试使用ColdFusion从SQL中获取ID

时间:2013-05-04 02:29:46

标签: sql web coldfusion

我一直在用他一直在做的网站帮助一个朋友。他负责维护ColdFusion网站。他主要是网页设计人,我的背景是asp.net。

我遇到的问题是他们希望能够将产品添加到购物车中。为了快速完成这个,我将使用现有的“添加到篮子”动作。问题在于网站通常使用名为productId的隐藏字段,但快速条目使用ModelID。

我的计划是从SQL后端获取productID,但每次尝试它都会引发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不是我的事。

1 个答案:

答案 0 :(得分: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,这就是您每次都看到相同错误的原因。