簡體   English   中英

CodeIgniter 3 在數據庫查詢錯誤的情況下不返回 false

[英]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語句進行此操作,但deleteupdate等的行為完全相同。

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM