[英]CodeIgniter 3 not returning false in case of a DB query error
我已經閱讀了很多與我遇到的這個錯誤相關的相關答案。 但是,沒有問題(或答案)是關於 CodeIgniter 的數據庫活動查詢 class 在它應該(因為發生錯誤)時返回 FALSE。 它所做的只是將查詢錯誤打印到application/logs
中的錯誤日志文件並退出。
DB_DEBUG 值為假。
$db['default']['db_debug'] = FALSE;
這是正在執行的查詢:
$this->db
->where('col_1_name', 'value')
->where_in('col_2_name', $array)
->delete('table_name');
發生錯誤是因為$array
是一個空數組,但這不是問題 - 問題是它不返回 false ,只是將查詢錯誤打印到 applications/logs/ 中的錯誤日志文件。 如果出現錯誤,它應該返回 false,不是嗎? 否則怎么會有人發現數據庫錯誤?
將該查詢的錯誤寫入日志文件后,它就退出該進程。 我已經通過在上述方法之前和之后添加log_messages()
來驗證這一點。
注意:我嘗試過使用DB_DEBUG
= TRUE 和 FALSE,兩種情況下都會發生同樣的事情。
注意:CodeIgniter 3 的文檔說delete()
方法(以及許多其他數據庫方法)在失敗時返回 FALSE。 https://www.codeigniter.com/userguide3/database/query_builder.html#CI_DB_query_builder::delete
根據您網站的設置方式,這不是錯誤。 遇到數據庫錯誤時,該方法不會神奇地返回false
。
如果db_debug
設置為true
,CI3 在遇到數據庫錯誤時停止執行,將錯誤輸出到屏幕並記錄下來,但您沒有機會評估錯誤。
但是, db_debug
設置為false
,您可以在運行查詢后立即檢查$this->db->error()
的值,您可以在其中檢查查詢是否正常運行。
我嘗試使用select
語句進行此操作,但delete
、 update
等的行為完全相同。
$query = $this->db->get();
log_message('debug', "Err: ".json_encode($this->db->error()));
這記錄:
DEBUG - 2020-10-09 12:09:44 --> Err: {"code":0,"message":""}
當沒有錯誤時,並且
Err: {"code":1064,"message":"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4"}
當有錯誤時。
$this->db->error()
實際上是一個數組,所以除了記錄它,你還可以檢查類似
$err = $this->db->error();
if ($err['code'] !== 0)
{
// do something about the error or handle the excepcion
}
else
{
// query ran OK, keep the method going
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.