ThinkPHP中的数据创建Create方法是一个非常有用的功能,它自动根据表单数据创建数据对象(在表字段很多的情况下尤其明显)
但有时候该方法可能并未按照你期望的来工作,比如方法不工作而且还没有提示错误信息
这个时候你就要好好仔细检查下你的代码了,因为很有可能你写的代码不规范或是其他原因
以下是我因为自己的粗心而出现的问题:Create方法失效而没有提示错误信息
/**
* 编辑数据
* @Author HTL
* @Email huangyuan413026@163.com
* @DateTime 2015-10-30T17:00:29+0800
*/
function edit_post(){
if(IS_POST){ print_r($this->org_model);
if ($this->org_model->create()) {
//code
echo $this->org_model->_sql();//最后一条执行的Sql die ("create");
} else {
echo $this->org_model->_sql();//最后一条执行的Sql
die($this->org_model->getError());
}
}
}
浏览器发出的POST请求数据
edit_post打印的信息
Think\Model Object
(
***
***
- )
SHOW COLUMNS FROM `table1`
好像上面的都没有什么问题,最主要的是得到了数据库信息(在Mysql里可以正常执行)但就是if(create()){}里的代码没有执行
说明create方法并未按照预期执行,该问题我找了半个小时在网络上也看了别人的一些经历都没有解决
然后我就看了下数据库表结构,我似乎明白了什么于是我把表字段的全部更改成小写然后再执行就解决了
问题原因:Html元素的值跟数据库存在大小写差异
参考网络上的经验总结下以下规则可解决以上问题:
- HTML中的元素是否指定了name属性且name的值跟数据库中的值完全一致(区分大小写)
- 确认HTML表单中的数据正确发送了出去
- Model 命名是否错误能否找到对应的表(能否打印了Model对象)
- Model类及其成员方法是否是私用或受保护
- Model的getError()方法是否有错误
- 方法能否接收到POST的值,POST接收到的值跟请求的值是否一致(注意大小写)
- 确认遵守了ThinkPHP的开发规范
如果以上还没有解决你的问题,那要考虑下你的人品了
参考: