ThinkPHP 添加數據到數據庫失敗
一般情況下會先檢查一下幾個方面
- 檢查控制器或Model名是否有誤
- 檢查需要插入的數據是否為空或者缺失參數
- 檢查數據表名及字段名稱(大部分下都是字段名有誤出錯的)
如果反復檢查,需插入的數據是正常的,字段名表名也沒有錯誤,你可能會想是不是程序耍脾氣了,退出重來?重啟一下?重來試一下?就這么折騰半天發現並沒有什么改變,這時候你該考慮一下其他情況了
fields字段緩存
使用ThinkPHP框架做開發時,有數據結構改動時,調用 M()->add()方法插入數據時,總會插入失敗,丟失掉部分字段內容,於是將模型對象打印出來仔細查看,會發現丟失的字段都是新增加的字段,你就會聯想到緩存了,於是你將runtime里面的緩存文件都清除掉就可以正常插入了。
TP在配置文件中如果沒有關閉字段緩存設置[TMPL_CACHE_ON => false],該配置的意思是是否開啟模板編譯緩存,設為false則每次都會重新編譯,默認是開啟的,只要一運行它就會將數據字段信息緩存到~Runtime/Data/_files 文件夾下,並以數組方式存放在文件中,不需要就關閉好啦
-
debug.php
return array( 'LOG_RECORD' => true, // 進行日志記錄 'LOG_EXCEPTION_RECORD' => true, // 是否記錄異常信息日志 'LOG_LEVEL' => 'EMERG,ALERT,CRIT,ERR,WARN,NOTIC,INFO,DEBUG,SQL', // 允許記錄的日志級別 'DB_FIELDS_CACHE' => false, // 字段緩存信息 'DB_DEBUG' => true, // 開啟調試模式 記錄SQL日志 'TMPL_CACHE_ON' => false, // 是否開啟模板編譯緩存,設為false則每次都會重新編譯 'TMPL_STRIP_SPACE' => false, // 是否去除模板文件里面的html空格與換行 'SHOW_ERROR_MSG' => true, // 顯示錯誤信息 'URL_CASE_INSENSITIVE' => false, // URL區分大小寫 );
-
convention.php
// 布局設置 'TMPL_ENGINE_TYPE' => 'Think', // 默認模板引擎 以下設置僅對使用Think模板引擎有效 'TMPL_CACHFILE_SUFFIX' => '.php', // 默認模板緩存后綴 'TMPL_DENY_FUNC_LIST' => 'echo,exit', // 模板引擎禁用函數 'TMPL_DENY_PHP' => false, // 默認模板引擎是否禁用PHP原生代碼 'TMPL_L_DELIM' => '{', // 模板引擎普通標簽開始標記 'TMPL_R_DELIM' => '}', // 模板引擎普通標簽結束標記 'TMPL_VAR_IDENTIFY' => 'array', // 模板變量識別。留空自動判斷,參數為'obj'則表示對象 'TMPL_STRIP_SPACE' => true, // 是否去除模板文件里面的html空格與換行 'TMPL_CACHE_ON' => true, // 是否開啟模板編譯緩存,設為false則每次都會重新編譯 'TMPL_CACHE_PREFIX' => '', // 模板緩存前綴標識,可以動態改變 'TMPL_CACHE_TIME' => 0, // 模板緩存有效期 0 為永久,(以數字為值,單位:秒) 'TMPL_LAYOUT_ITEM' => '{__CONTENT__}', // 布局模板的內容替換標識 'LAYOUT_ON' => false, // 是否啟用布局 'LAYOUT_NAME' => 'layout', // 當前布局名稱 默認為layout
-
系統行為擴展:模板解析 檢查緩存文件是否有效,如果無效則需要重新編譯,ParseTemplateBehavior.class.php
protected function checkCache($tmplTemplateFile,$prefix='') { if (!C('TMPL_CACHE_ON')) // 優先對配置設定檢測 return false; $tmplCacheFile = C('CACHE_PATH').$prefix.md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX'); if(!Storage::has($tmplCacheFile)){ return false; }elseif (filemtime($tmplTemplateFile) > Storage::get($tmplCacheFile,'mtime')) { // 模板文件如果有更新則緩存需要更新 return false; }elseif (C('TMPL_CACHE_TIME') != 0 && time() > Storage::get($tmplCacheFile,'mtime')+C('TMPL_CACHE_TIME')) { // 緩存是否在有效期 return false; } // 開啟布局模板 if(C('LAYOUT_ON')) { $layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX'); if(filemtime($layoutFile) > Storage::get($tmplCacheFile,'mtime')) { return false; } } // 緩存有效 return true; }