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的開發規范
如果以上還沒有解決你的問題,那要考慮下你的人品了
參考: