ColdFusion与MySQL数据库通信的问题

时间:2010-03-25 02:27:22

标签: mysql coldfusion

我一直在努力将非营利性网站从本地服务器(运行Windows XP)迁移到GoDaddy托管帐户(运行Linux)。大多数页面都是用ColdFusion编写的。事情进展顺利,直至这一点。网站中有一个Flash表单(请参阅此页面:http://www.preservenet.cornell.edu/employ/submitjob.cfm),完成后会将访问者带到此页面:submitjobaction.cfm。我不太确定该错误是什么,因为我完全复制了旧MySQL数据库中的内容,而.cfm文件与他们在旧服务器上工作时完全一样。我错过了什么吗?

以下是错误似乎指的数据库中的代码。当我在错误中建议将“Positionlat”更改为数据库中的某个默认值时,它表示另一个字段需要一个默认值,并且当我尝试纠正它时,它是一个无休止的错误链。

这可能是一个我错过的愚蠢错误,但我已经在这里工作了好几天,却找不到我所缺少的东西。我真的很感激任何帮助。

谢谢!

-Greg


DROP TABLE IF EXISTS employopp;

CREATE TABLE employopp

POSTID int(10)NOT NULL auto_increment,

USERID varchar(10)collat​​e latin1_general_ci默认为NULL,

STATUS varchar(10)collat​​e latin1_general_ci NOT NULL默认'ACTIVE',

TYPE varchar(50)整理latin1_general_ci默认'专业',

JOBTITLE varchar(70)collat​​e latin1_general_ci默认为NULL,

NUMBER varchar(30)collat​​e latin1_general_ci默认为NULL,

SALARY varchar(40)collat​​e latin1_general_ci默认为NULL,

ORGNAME varchar(70)collat​​e latin1_general_ci默认为NULL,

DEPTNAME varchar(70)collat​​e latin1_general_ci默认为NULL,

ORGDETAILS mediumtext字符集utf8 collat​​e utf8_unicode_ci,

ORGWEBSITE varchar(200)collat​​e latin1_general_ci默认为NULL,

ADDRESS varchar(60)collat​​e latin1_general_ci默认'none given',

ADDRESS2 varchar(60)collat​​e latin1_general_ci默认为NULL,

CITY varchar(30)collat​​e latin1_general_ci默认为NULL,

STATE varchar(30)collat​​e latin1_general_ci默认为NULL,

COUNTRY varchar(3)整理latin1_general_ci默认'美国',

POSTALCODE varchar(10)collat​​e latin1_general_ci默认为NULL,

EMAIL varchar(75)collat​​e latin1_general_ci默认为NULL,

NOMAIL varchar(5)collat​​e latin1_general_ci默认为NULL,

PHONE varchar(20)collat​​e latin1_general_ci默认为NULL,

FAX varchar(20)collat​​e latin1_general_ci默认为NULL,

WEBSITE varchar(200)collat​​e latin1_general_ci默认为NULL,

POSTDATE varchar(10)collat​​e latin1_general_ci默认为NULL,

POSTUNTIL varchar(20)整理latin1_general_ci默认'选择日期',

POSTUNTILFILLED varchar(20)collat​​e latin1_general_ci NOT NULL默认'直到填充',

texteHTML mediumtext字符集utf8 collat​​e utf8_unicode_ci,

HOWTOAPPLY mediumtext字符集utf8 collat​​e utf8_unicode_ci,

CONFIRSTNM varchar(30)collat​​e latin1_general_ci默认为NULL,

CONLASTNM varchar(60)collat​​e latin1_general_ci默认为NULL,

POSITIONCITY varchar(30)collat​​e latin1_general_ci默认为NULL,

POSITIONSTATE varchar(30)collat​​e latin1_general_ci默认为NULL,

POSITIONCOUNTRY varchar(3)整理latin1_general_ci默认'美国',

POSITIONLAT varchar(50)collat​​e latin1_general_ci NOT NULL,

POSITIONLNG varchar(50)collat​​e latin1_general_ci NOT NULL,

PRIMARY KEY(POSTID

)ENGINE = MyISAM AUTO_INCREMENT = 2007 DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci;


更新:


我认为“submitjobaction.cfm”页面与数据库进行通信:

   <CFINSERT DATASOURCE="mysqlcf_preservenet" TABLENAME="employopp" FORMFIELDS=" TYPE, JOBTITLE, NUMBER, SALARY, ORGNAME, DEPTNAME, ORGDETAILS, ORGWEBSITE, ADDRESS, ADDRESS2, CITY, STATE, COUNTRY, POSTALCODE, EMAIL, NOMAIL, PHONE, FAX, WEBSITE, POSTDATE, POSTUNTIL, texteHTML, HOWTOAPPLY, CONFIRSTNM, CONLASTNM, POSITIONCITY, POSITIONSTATE, POSITIONCOUNTRY">
          <CFINSERT DATASOURCE="mysqlcf_preservenet" TABLENAME="user" FORMFIELDS=" ORGNAME, WEBSITE, ADDRESS, ADDRESS2, CITY, STATE, COUNTRY, POSTALCODE, EMAIL, PHONE, FAX, CONFIRSTNM, CONLASTNM" >

2 个答案:

答案 0 :(得分:1)

我没有使用mysql,cfform或cfinsert这样的ymmv这个答案,但似乎问题出在数据库配置中。

2007年的

This blog post建议更改sql-mode的ini设置。您需要与主持人联系以检查当前值并尝试将其更改。

看起来表单正在为未答复字段发送零长度值,数据库拒绝这些值。

另一种方法是用正常的cfquery替换cfinsert - 这将为你提供更多的“空”值提供灵活性。

答案 1 :(得分:0)

我收到以下错误消息:


执行数据库查询时出错。

字段'CONFIRSTNM'没有默认值

资源:

...

这里似乎发生的是,某些表单字段(名为CONFIRSTNM - 我认为是Contact Firstname)在POST中为空,并且数据库没有设置默认值。因为您的cf代码使用的是CFINSERT,所以您实际上并没有自己编写SQL代码,但CF应该为您执行此操作。很难从远处调试,但我认为你应该做的是确保数据库从旧环境1:1迁移到新环境。不确定迁移是如何完成的,但它可能在此过程中丢失了一些信息。

良好编码实践的另一个建议是使用CFQUERY标记重写CFINSERT并自己编写SQL语句。另外,请确保对所有传入参数使用CFQUERYPARAM。