簡體   English   中英

Codeigniter 應用程序返回“致命錯誤:在實時而非本地調用非對象 in”上的成員函數 result()

[英]Codeigniter App Returns `Fatal error: Call to a member function result() on a non-object in` on live but not local

我是 codeigniter 的新手,也是面向 OOP 的 MVC 方法的新手,所以我已經接受了這樣一個事實,即這是我犯的一個錯誤,不太可能是我自己的代碼之外的問題。

我有一個控制器 (Purchase_Order),它加載 2 個模型 (Product_m & Supplier_m) + 其他。

我構建了一個自定義 MY_Model,它采用 0 參數並根據模型設置(table_name、primary_key 等...)生成查詢。

在我的本地實例 (Wamp) 中,它運行良好。 一旦我上傳到 Live web 服務器 (Linux),我就會收到以下錯誤;

Fatal error: Call to a member function result() on a non-object in (MY_Model.php on line 58)

我有另一個控制器(用戶),它加載模型(User_m)並通過相同的 MY_Model 路由傳遞,並且可以在線和本地完美運行。

我只能假設我有一個范圍問題或類似的問題,但我在過去的 48 小時內一直沉迷於修復無濟於事。

我真的希望有人能抽出時間在這個主題上啟發我。

MY_型號

class MY_Model extends CI_Model {    
//Vars
protected $_table_name = '';
protected $_primary_key = 'id';
protected $_primary_filter = 'intval';
protected $_order_by = '';
public $_rules = array();
//protected $_timestamps = FALSE;

//Constructor
function __construct() {
    parent::__construct();
}



// GET
public function get($id = NULL, $single = FALSE) {

    if($id != NULL){
        $filter = $this->_primary_filter;
        $id = $filter($id);
        $this->db->where($this->_primary_key, $id);
        $method = 'row';
    }
    elseif($single == TRUE){
        $method = 'row';
    }
    else{
        $method = 'result';
    }

    if(!count($this->db->ar_orderby)){
        $this->db->order_by($this->_order_by);
    }

    //echo var_dump($this);
    return $this->db->get($this->_table_name)->$method();
    //die('<pre>'.print_r($this->db, true).'</pre>');
}

其他類被刪除,因為它們不是問題的一部分。

非常感謝所有人,但最終 @rojoca 作為相關問題: Looks like $this->db->get($this->_table_name) is returning null. Do you have $db['default']['db_debug'] set to FALSE? It's possible you have some database connection error. Looks like $this->db->get($this->_table_name) is returning null. Do you have $db['default']['db_debug'] set to FALSE? It's possible you have some database connection error. 這讓我得到了答案;

我之前曾將實時 DBase 導出到本地實例以進行測試,該實例運行良好,這讓我天真地相信這不是問題所在。

我為實時站點使用了不同的數據庫配置設置,它確實將 db_debug 設置為 FALSE。 重新打開它很快就發現我正在使用的 Web 服務器/服務強制表名小寫。 我完全不知道這一點,我以前也從未聽說過這種強制方法。

給我的教訓。 再次感謝您在此問題上的所有幫助。 這個答案的所有功勞都應該歸功於@rojoca。 謝謝-該睡覺了:)

發生這種情況時,意味着 codeigniter 無法在您的數據庫表中找到字段(這在我身上發生過多次)。 該解決方案理論上會創建缺失的字段。

為了解決這個錯誤,我使用了一個小解決方案:

 <?php

   public function test($op)
    {
        $this->db->where('op', $op);
        $result = $this->db->get('test');
        return ($result instanceof CI_DB_mysql_result) ? $result->result() : false;
    }

這里我們檢查變量是否是 CI_DB_mysql_result 的實例。 出現這個錯誤是因為該方法沒有返回這個類的實例!!!

對不起,我不會說英語。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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