2014-07-01 39 views
-2

我目前正在使用medoo.php框架,儘管我通常會在github上使用它們的票據區域,但似乎沒有人真正使用它...所以... 無論如何,當我跑步時我的文件中的一個,它使用「規定」來調用框架,我得到以下錯誤:PHP錯誤:不能使用標量值作爲數組...然而

Warning: Cannot use a scalar value as an array in /home/..../public_html/projects/friendcodes/medoo.min.php on line 759

然而,當我檢查代碼(下面是第752到764行),我發現它實際上應該檢查$ where是否未設置,如果不是,請將其設置爲數組 - 但是,此php錯誤不同。

我猜$where被設置爲一個變量在其他地方,這不是一個數組,但在框架中有超過100個變量出現,並且你可能不想要的代碼有830行查看。 (讓我知道在評論,我會添加 - 再重申一遍,這是直接從medoo最最近的兩個更新/版本。)

public function get($table, $columns, $where = null) 
{ 
    if (!isset($where)) 
    { 
     $where = array(); 
    } 

    $where['LIMIT'] = 1; 

    $data = $this->select($table, $columns, $where); 

    return isset($data[0]) ? $data[0] : false; 
} 

我的主要問題是 - 如何糾正這個問題不打破東西在這個非常複雜的框架中(無論如何,我的水平)

更新:我多麼愚蠢!我發現了這個問題。就像人們所建議的那樣,我在錯誤的地方打電話給$。 我被稱之爲:

$accountinfo = $database->get('xf_user_field_value', ['field_value'], 1); 

而不是

$accountinfo = $database->get('xf_user_field_value', ['field_value'], ["user_id"=>1]); 

(其中第三個參數是$這裏)感謝您的幫助傢伙!

+0

'if(is_array($ where))$ where ['LIMIT'] = 1;' –

+1

如果您知道要重複該問題的頁面/函數,爲什麼不將$ where變量轉儲到獲得功能?然後在出錯之前你可以看到它的內容,並知道是什麼調用它,爲什麼? –

+1

如何調用' - > get()'?更具體地說,第三個參數是什麼?您可以設置一個捕獲警告的錯誤處理程序,然後在不知道的情況下打印回溯。 –

回答

1

權,首先第一件事情,我們需要找出什麼叫get不應該。這是整個問題。問題不是函數本身,問題是使用不是數組的參數$where來調用它。改變一個圖書館來解決一個錯誤的電話是荒謬的。

步驟1:暫時編輯get函數以包含$where變量的print_r

public function get($table, $columns, $where = null) 
{ 
    if(isset($where)) print_r($where); 
    if (!isset($where)) 
    { 
     $where = array(); 
    } 

    $where['LIMIT'] = 1; 

    $data = $this->select($table, $columns, $where); 

    return isset($data[0]) ? $data[0] : false; 
} 

這將顯示我們的錯誤打印的$where的價值,這將有助於你找到畸形get調用之前。

如果失敗,請嘗試使用PHP的內置回溯,試圖找到問題:

public function get($table, $columns, $where = null) 
{ 
    if(isset($where)) print_r(debug_backtrace()); 
    if (!isset($where)) 
    { 
     $where = array(); 
    } 

    $where['LIMIT'] = 1; 

    $data = $this->select($table, $columns, $where); 

    return isset($data[0]) ? $data[0] : false; 
} 
+0

感謝回溯提示!我現在正在努力。 – muffinjello

-2

編輯3:嘗試移動$where['LIMIT'] = 1;的isset聲明裏面,因爲你不會想如果$where通過引用傳遞來傳遞LIMIT 1到查詢構造。

免責聲明我不知道medoo框架。

public function get($table, $columns, $where = null) 
{ 
    if (is_null($where)) 
    { 
     $where = array('LIMIT'=>1); 
    } 



    $data = $this->select($table, $columns, $where); 

    return isset($data[0]) ? $data[0] : false; 
} 
+0

這並不真正回答這個問題,因爲empty()將返回與isset()相同的結果。標量警告仍然存在。 –

+0

好吧,我會嘗試別的。如何回答一個三元陳述默認爲'array()' – r3wt

+0

這不是問題所在,PHP會拋出標量問題,因爲它不確定數組是否在數組中。 –

1

->get()方法不正確調用。

Cannot use a scalar value as an array

即顯示警告如果$where要麼是true,數值或資源。有效的方法調用包括:

->get('table', '*') 
->get('table', '*', array('WHERE' => 'foo = "bar"')) 

檢查manual並修復您的代碼。

相關問題