2012-02-03 89 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