通过coldfusion写入数据库

时间:2012-02-03 22:23:17

标签: database coldfusion

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

<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>

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

错误信息如下。

栏目0
ID CFQUERY
LINE 24
RAW_TRACE at cfsubmit2ecfm1505563048.runPage(D:\ web \ careers \ academicinternship \ submit.cfm:24)
模板D:\ web \ careers \ academicinternship \ submit.cfm
TYPE CFML

谢谢,

4 个答案:

答案 0 :(得分: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 :(得分: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>

答案 2 :(得分:4)

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

另外,一个巨大的建议 - 在插入的值上使用cfqueryparam来防止SQL注入,例如:

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

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

答案 3 :(得分:2)

有两件事情跳出来:

  1. 您应该在insert语句中使用<cfqueryparam>(以及应用程序中的每个其他查询)。这是为了防止SQL注入,也可以稍微提高性能。
  2. 您应该在VALUES子句之前在insert语句中明确列出列。