進行數據庫操作的時候,操作錯誤或者失敗,但是不報錯
阿新 • • 發佈:2018-05-17
但是 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還是隱藏的,不容易發現。
進行數據庫操作的時候,操作錯誤或者失敗,但是不報錯