ColdFusion表单不提交数据到数据库
问题描述:
我遇到了一些问题,我的ColdFusion代码, 我有一个简单的表单,我所要做的就是将值添加到数据库。我不断收到错误: “错误代码206 [Macromedia公司] [SQLServer的JDBC驱动程序] [SQLServer的]操作数类型冲突:INT与文字不兼容”ColdFusion表单不提交数据到数据库
这里是我的代码:
<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#中的单引号,我得到“无效的列名称(我输入的内容)'。”
答
如果数据库中的hexvalue字段是文本字段,例如为nvarchar,VARCHAR,文本,然后在你至少需要引号的变量...即
<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>
答
您需要添加引号#form.hex#
,因为它是一个字符串值,而不是整数:
INSERT INTO color_codes
(id ,color, hexvalue)
VALUES
(#form.id#, '#form.color#', '#form.hex#')
事实上,它看起来像你的ID是一个文本字段,以及。这是如何在数据库中设置的?你没有做任何验证,数值是数字....通常ID是一个自动递增字段,并且在插入时根本不由用户提供。
+6
*您需要添加引号* ...尽管你真的应该使用的是cfqueryparam ;-)它避免了引号的需要,可以提高性能,更重要的是有助于防止sql注入(你当前的查询是脆弱的)。 – Leigh
绝对在所有变量查询参数上使用cfqueryparam。那么你不需要担心数据类型转换或应该或不应该引用哪些值。此外,它对于像SQL Server这样的数据库尤其重要,因为它们支持执行多个语句,即易受sql注入影响。使用cfqueryparam意味着你正在使用[bind variables](https://en.wikipedia.org/wiki/Bind_variable),它带来了各种各样的好处,其中最重要的就是sql注入保护。 – Leigh
谢谢!其他一些人提到了cfqueryparam,但我不确定如何使用它。这对我来说很有意义!谢谢! – Benjadock
我用cfqueryparam替换了它们,它完美地工作,谢谢@Jedihomer Townend&@Leigh! – Benjadock