2013-03-11 1 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() для не-объекта». Что здесь происходит, потому что я действительно не понимаю сообщение об ошибке? Если я запрошу свой db с помощью метода запроса, он будет работать нормально, но как я могу привязать значения с помощью метода подготовки?

+0

Я могу предположить, что вы переопределяете $ this ... изменение на другое имя переменной ... даже для соглашения –

+0

Является ли этот метод 'public function ($ sql)' anonymous? – Voitcus

+0

Я предполагаю, что у вас есть "" по вашему запросу, и просто пропустил их, набрав код на SO? – Mchl

ответ

1

В:

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

Вы забыли вернуть результат. (Вы также забыли название функции в фрагменте.)

Сообщение об ошибке достаточно ясно, вы вызываете метод на то, что не является объектом. В этом случае вы вызываете его на NULL, потому что ваш собственный метод-метод ничего не возвращает.

+0

Hah! Ты был прав! Насколько я понимаю, мне нужно было вернуть то, что было создано методом prepare(), или я пытался привязать значения почти ничего? и это привело к ошибке? – ejx

+1

В частности: вы пытались вызвать метод почти ничего. – Sherlock

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» должен быть классом anothe, к которому вы пытаетесь получить доступ к его методу запроса ... Посмотрите на свой код еще раз.

И, наконец, у вас отсутствует оператор возврата.