ColdFusion表单不向数据库提交数据

Ben*_*ock 2 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>
Run Code Online (Sandbox Code Playgroud)

如果我从#form.color#中删除单引号,我会收到"无效的列名"(我输入的内容)'."

小智 8

如果数据库中的hexvalue字段是文本字段,例如nvarchar,varchar,text,那么至少你需要在变量周围引用... ie

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

    INSERT INTO color_codes (id ,color, hexvalue)
    VALUES (#form.id#, '#form.color#', '#form.hex#')
</cfquery>
Run Code Online (Sandbox Code Playgroud)

但是我强烈建议你也参考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>
Run Code Online (Sandbox Code Playgroud)

  • 绝对在所有变量查询参数上使用cfqueryparam.然后,您无需担心数据类型转换或应该或不应引用哪些值.此外,对于像SQL Server这样的数据库尤为重要,因为它们支持多个语句的执行,即易受sql注入攻击.使用cfqueryparam意味着你正在使用[绑定变量](https://en.wikipedia.org/wiki/Bind_variable),它带来了各种好处,其中最重要的是sql注入保护. (3认同)