1. 程式人生 > >進行數據庫操作的時候,操作錯誤或者失敗,但是不報錯

進行數據庫操作的時候,操作錯誤或者失敗,但是不報錯

但是 HP 顯式 erro 正方 sqli pan 數據 n)

首先需要註意的是:

  PHP代碼的運行錯誤 和 PHP與MySQL中交互過程中,MySQL中發生的錯誤,並不一定是同步的。

Case 1:使用PDO,沒有設置PDO::ATTR_ERRMODE

  PDO在沒有設置錯誤處理模式的時候,默認的是PDO::ERRMODE_SILENT,即--不報錯,不管是使用PDO::query還是PDO::exec都不報錯,但是可以通過PDO::errorCode()來判斷是否出錯,或者query和exec的返回值來判斷sql語句是否操作成功,註意此時PHP的代碼是成功執行了的,註意區分。

  如果要顯式的提示錯誤的話,可以將錯誤處理模式設置為PDO::ERRMODE_EXCEPTION。

  改正方法:  

PDO::setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION)

  

Case 2:使用mysqli,使用mysqli::query來執行update、delete、drop、insert這些DML類型的命令

  使用mysqli::query來執行DML命令的時候,其實是真的執行了,也返回執行結果了,但是操作失敗了,不僅不會報錯,而且還會繼續執行後面的代碼,這是很需要註意的。

  mysqli::query執行DML命令,成功的話,返回true;失敗了就返回false。所以如果要使用mysqli::query來執行DML的話,請一定要加上判斷,根據返回值決定是否進行下一步操作,不要因為一次失敗的數據庫操作,導致你後續工作的bug,而且這bug還是隱藏的,不容易發現。

  

進行數據庫操作的時候,操作錯誤或者失敗,但是不報錯