2012-02-03 55 views
-1

我在写一个submit.cfm文件。我试图将用户信息写入一个空白的新数据库。 这里是我的代码:用coldfusion写入数据库

<cfif ParameterExists(form.submit)> 
<cfquery name="AddProfile" datasource="careers_acad_internship"> 
    INSERT INTO internships 
     VALUES (
      '#form.stu_first#', '#form.stu_last#', 
      #form.stu_id#,  '#form.sup_name#', 
      '#form.sup_email#', #form.sup_phone#, 
      '#form.emp_name#', '#form.emp_add#', 
      '#form.spec_obj#', '#form.spec_duties#', 
      '#form.semester#', #form.intern_year#, 
      '#form.work_sche#', '#form.digital_sig#')   
</cfquery> 

但事实证明,有一个错误。我不知道这是否是一些语法错误或其他。

错误消息如下。

COLUMN 0
ID CFQUERY
LINE 24
RAW_TRACE在cfsubmit2ecfm1505563048.runPage(d:\网络\事业\ academicinternship \ submit.cfm:24)
TEMPLATE d:\网络\事业\ academicinternship \提交.CFM
TYPE CFML

感谢,

+5

您收到了什么错误?不知道错误是什么,很难排除错误。根据所包含的代码,您没有结尾的''标签。从ColdFusion MX开始,不推荐使用'parameterExists',所以如果您使用的是较新版本,可能会给您带来麻烦。 – 2012-02-03 22:27:07

+1

请编辑您的问题以包含您收到的实际错误消息。一旦包含,我们将能够提供更多的帮助。 – 2012-02-04 03:15:24

+0

COLUMN 0 ID CFQUERY LINE在cfsubmit2ecfm1505563048.runPage(d 24 RAW_TRACE:\网络\事业\ academicinternship \提交。cfm:24) TEMPLATE D:\ web \ careers \ academicinternship \ submit.cfm TYPE CFML – 2012-02-06 18:26:35

回答

4

您需要包括列名的列表中值插入到 例如:

INSERT INTO internships (stu_first, stu_last, stu_id, sup_name,sup_email,sup_phone,emp_name,emp_add,sec_obj,spec_duties,semester,intern_year,work.sche,digital_sig) VALUES('#form.stu_first#','#form.stu_last#',#form.stu_id#,'#form.sup_name#','#form.sup_email#',#form.sup_phone#,'#form.emp_name#', '#form.emp_add#','#form.spec_obj#','#form.spec_duties#','#form.semester#',#form.intern_year#,'#form.work_sche#','#form.digital_sig#')

假设,当然,你的列名是相同的表单变量名。

+1

对于许多数据库引擎,这不是必需的。只要在'VALUES'列表中指定的字段的数量,类型和顺序与为该表的定义所指定的内容相同,那么原始问题的语法就是有效的。我认为最好的做法是按照您的建议包含字段列表,但这不太可能是导致错误的原因(本文未详细说明,否则我只是从那里进行诊断)。 – 2012-02-04 03:12:17

2

两件事情跳出来:

  1. 你应该在你的INSERT语句(和应用程序中的所有其他查询)使用<cfqueryparam>。这是为了防止SQL注入,并且稍微提高性能。
  2. 您应该在VALUES子句之前的插入语句中明确列出您的列。
4

首先,仔细检查你的数据类型,我注意到你引用了一些变量,但没有引用其他变量,请确保波纹管是正确的。

 
<cfquery datasource="foobar"> 
    INSERT INTO internships 
     (stu_first,stu_last,stu_id,sup_name,sup_email,sup_phone,emp_name,emp_add,spec_obj,spec_duties,semester,intern_year,work_sche,digital_sig) 
    VALUES(
     <cfqueryparam value="#form.stu_first#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.stu_last#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.stu_id#" cfsqltype="cf_sql_integer" />, 
     <cfqueryparam value="#form.sup_name#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.sup_email#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.sup_phone#" cfsqltype="cf_sql_integer" />, 
     <cfqueryparam value="#form.emp_name#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.emp_add#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.spec_obj#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.spec_duties#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.semester#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.intern_year#" cfsqltype="cf_sql_integer" />, 
     <cfqueryparam value="#form.work_sche#" cfsqltype="cf_sql_varchar" />, 
     <cfqueryparam value="#form.digital_sig#" cfsqltype="cf_sql_varchar" /> 
    ) 
</cfquery> 
4

如果您可以发布您收到的错误,这将有所帮助。

此外,一个巨大的建议 - 用cfqueryparam您插入值,以防止SQL注入,例如:

<cfqueryparam value="#form.stu_first#" cfsqltype="cf_sql_varchar"> 

仔细检查您的#标志和你的刻度线,更何况那些变量的存在。有时我会在插入之前插入<cfabort>,并且启用调试输出后,可以向下滚动并查看所有表单变量。然后,我将复制/粘贴这些文件以确保我拼写正确。

+0

COLUMN 0 ID CFQUERY LINE 24 RAW_TRACE在cfsubmit2ecfm1505563048.runPage(d:\网络\事业\ academicinternship \ submit.cfm:24) TEMPLATE d:\网络\事业\ academicinternship \ submit.cfm TYPE CFML – 2012-02-06 18:25:05