ColdFusion表单未向数据库

时间:2016-05-17 19:55:30

标签: sql sql-server coldfusion

我的ColdFusion代码遇到了一些问题, 我有一个简单的表单,我想要它做的就是将值添加到数据库中。我一直收到错误: "错误代码206 [Macromedia] [SQLServer JDBC驱动程序] [SQLServer]操作数类型冲突:int与文本"

不兼容

这是我的代码:

    <div class="form">
    <form method="post" name="color">
        ID:
        <input type="text" name="id" id="id">
        Color Name:
        <input type="text" name="color" id="color">
        Hex Value:
        <input type="text" name="hex" id="hex">
        <input type="submit" value="Submit">
    </form>
</div>
<div>
    <cfif structKeyExists(form, "color")>
        <cfquery datasource="bentest" name="insertColor">
            USE [benTest]

            INSERT INTO color_codes
            (id ,color, hexvalue)
            VALUES
            (#form.id#, '#form.color#', #form.hex#)
        </cfquery>
        <p>You've added a color to the database!</p>
    </cfif>
</div>

如果我从#form.color#中删除单引号,我会得到&#34;无效的列名&#39;(我输入的内容)&#39;。&#34;

2 个答案:

答案 0 :(得分:8)

如果数据库中的十六进制字段是文本字段,例如nvarchar,varchar,text,那么至少你需要围绕变量的引号......即

<cfquery datasource="bentest" name="insertColor">
    USE [benTest]

    INSERT INTO color_codes (id ,color, hexvalue)
    VALUES (#form.id#, '#form.color#', '#form.hex#')
</cfquery>

但是我强烈建议你们也使用cfqueryparam,即

<cfquery datasource="bentest" name="insertColor">
    USE [benTest]

    insert into 
       [color_codes] (
          [Id], 
          [Color], 
          [HexValue]
    )
    values (
        <cfqueryparam value="#Form.Id#" cfquerytype="cf_sql_integer">,
        <cfqueryparam value="#Form.Color#" cfquerytype="cf_sql_varchar">,
        <cfqueryparam value="#Form.Hex#" cfquerytype="cf_sql_varchar">
    )
</cfquery>

答案 1 :(得分:1)

您需要为#form.hex#添加引号,因为它是字符串值,而不是整数:

INSERT INTO color_codes
        (id ,color, hexvalue)
        VALUES
        (#form.id#, '#form.color#', '#form.hex#')

实际上,看起来你的id也是一个文本字段。这是在数据库中设置的方式吗?您没有进行任何验证该值是数字....通常ID是一个自动递增字段,并且在插入时根本不由用户提供。