資料庫(MySQL)意外報錯出現在頁面上的問題?

來源:互聯網
上載者:User

架構中如何禁止資料庫(MySQL)意外報錯?
比如說我這邊有兩個excel表格上傳功能,當然我兩個地方,寫的excel接收資料的處理方法不一樣,但是你知道,資料庫中有些欄位的名稱不可為空,如果兩個地方的excel檔案互相對調上傳,那麼這個時候就會出現sql報錯,就像這樣:

  1. 如果我每個接收欄位的資料,都要對應資料庫做不可為空判斷,豈不是太麻煩?

  2. 我一個excel表格上傳功能,只單單對應的一個方法,也就是一對一。因為我excel結構不一樣,所以一個方法對應一個類型的excel結構處理。

所以想求一個能屏蔽sql報錯出現在頁面上的解決辦法,請大神指教。

回複內容:

架構中如何禁止資料庫(MySQL)意外報錯?
比如說我這邊有兩個excel表格上傳功能,當然我兩個地方,寫的excel接收資料的處理方法不一樣,但是你知道,資料庫中有些欄位的名稱不可為空,如果兩個地方的excel檔案互相對調上傳,那麼這個時候就會出現sql報錯,就像這樣:

  1. 如果我每個接收欄位的資料,都要對應資料庫做不可為空判斷,豈不是太麻煩?

  2. 我一個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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.