2013-03-11 72 views
0

我有一個方法是這樣的:調用非對象解決方法?

public function query ($sql) { 
    $this->result = $this->db->query($sql); 
} 

綁定查詢語句的結果變量。這非常方便,因爲我有幾種方法可以輸出一些東西,另一種方法可以爲其他任務處理$result變量。

不過,我想用同一種方法,但在準備好的發言(以逃脫被插入​​的數據),我遇到了一個問題:

public function prepare ($sql) { 
    $this->result = $this->db->prepare($sql); 
} 

我試圖用這樣的:

public function insert ($this, $that) { 
    // Then I tried to use my prepare method 
    $var = $this->prepare(INSERT INTO Table (Row1, Row2) VALUES (:Val1, :Val2)); 
    $var->bindValue(":Val1", $this, PDO::PARAM_INT); 
    //... and so on 
} 

問題出現在$var->bindValue()「調用非對象的成員函數bindvalue()」上。這裏究竟發生了什麼,因爲我不明白錯誤信息?如果我查詢我的數據庫使用查詢方法它工作得很好,但我怎樣才能使用prepare方法綁定值?

+0

我可能會認爲你重寫了$ this ...改變爲另一個變量名...即使對於約定 – 2013-03-11 15:44:18

+0

這種方法'公共函數($ sql)'匿名嗎? – Voitcus 2013-03-11 15:45:00

+0

我假設你有「」喚醒你的查詢,只是在輸入SO上的代碼時錯過了它們? – Mchl 2013-03-11 15:45:11

回答

1

在:

public function ($sql) { 
    $this->result = $this->db->prepare($sql); 
} 

您流連忘返結果。 (您也忘記了片段中函數的名稱。)

錯誤消息非常明確,您正在調用某個不是對象的方法。在這種情況下,您在NULL上調用它,因爲您自己的prepare-method不會返回任何內容。

+0

哈!你是對的!據我所知,我需要返回什麼prepare()方法產生或我試圖綁定值幾乎沒有什麼?那導致了錯誤? – ejx 2013-03-11 15:50:52

+1

更具體地說:您試圖在幾乎沒有任何東西的地方調用方法。 – Sherlock 2013-03-11 15:52:25

0

首先我注意到你的方法沒有名字。

public function ($sql) { $this->result = $this->db->query($sql); }

它不應該是這樣的

public function doSomething($sql) { $this->result = $this->db->query($sql); }

其次,看來你是在你的方法調用另一個類的一個實例。

$this->db->query($sql) 如果沒有錯,'db'應該是您正試圖訪問其查詢方法的類...再次查看您的代碼。

最後我錯過了一個return語句。