框架中如何禁止資料庫(MySQL)意外報錯?
比如說我這邊有兩個excel表格上傳功能,當然我兩個地方,寫的excel接收資料的處理方法不一樣,但是你知道,資料庫中有些欄位的名稱不能為空,如果兩個地方的excel檔案互相對調上傳,那麼這個時候就會出現sql報錯,就像下圖這樣:
如果我每個接收字段的數據,都要對應資料庫做不能為空判斷,豈不是太麻煩?
我一個excel表格上傳功能,只單單對應的一個方法,也就是一對一。因為我excel結構不一樣,所以一個方法對應一個類型的excel結構處理。
所以想求一個能屏蔽sql報錯出現在頁面上的解決辦法,請大神指教。
框架中如何禁止資料庫(MySQL)意外報錯?
比如說我這邊有兩個excel表格上傳功能,當然我兩個地方,寫的excel接收資料的處理方法不一樣,但是你知道,資料庫中有些欄位的名稱不能為空,如果兩個地方的excel檔案互相對調上傳,那麼這個時候就會出現sql報錯,就像下圖這樣:
如果我每個接收字段的數據,都要對應資料庫做不能為空判斷,豈不是太麻煩?
我一個excel表格上傳功能,只單單對應的一個方法,也就是一對一。因為我excel結構不一樣,所以一個方法對應一個類型的excel結構處理。
所以想求一個能屏蔽sql報錯出現在頁面上的解決辦法,請大神指教。
資料庫報錯不是不能屏蔽,但沒必要,而且這會產生更多問題。既然某欄位不能為Null自然有其道理,你非要寫進去那後面處理的時候到了這個地方怎麼辦?由此也可以看出你沒有在執行插入前對資料進行有效性檢查,上傳資料等同於使用者輸入的數據,必須防止髒數據進入。
通常的處理邏輯為:
逐行讀取csv,使用驗證規則驗證數據,如果ok存入$success,否則存入$bad,根據業務邏輯不同,當$bad非空時可能先顯示清單要求用戶確認拋棄不合法的數據,也有的直接把$success中的數據遍歷插入,然後產生報告哪些已經插入,哪些未處理。
既然你有多種格式的csv,自然應該檢查一下目前上傳的csv是否與處理方法一致,否則萬一真存進去了怎麼辦?真心不建議偷懶。
用 try {}catch (Exception $e){}捕捉異常就可以了
框架的話應該可以關閉debug模式,照理說都可以自動屏蔽掉的。
如果是想要在程式碼中手動把空字段設定為預設值,可以自己寫一個過濾器,過濾器裡面判斷是否為空,是的話給一個預設值。
1、你可以在資料庫設計的時候定義一個預設值例如0
2、在程式上在插入這條資料時,user_id欄位你保證它有值。
如果生產中該欄位允許為 null ,那就改表
如果不允許,那報錯就表示資料有問題,ignore 是有危險的。你應該保證來源資料不為 null,而不是粗暴地 ignore