调用非对象变通方法?

时间:2013-03-11 15:41:41

标签: php class methods prepare

我有这样的方法:

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方法绑定值?

2 个答案:

答案 0 :(得分:1)

在:

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

您忘记返回结果。 (您还忘记了代码段中该功能的名称。)

错误信息很清楚,你在一个不是对象的东西上调用一个方法。在这种情况下,您在NULL上调用它,因为您自己的prepare-method不会返回任何内容。

答案 1 :(得分: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'应该是你试图访问其查询方法的另一类...再看看你的代码。

最后,我错过了一份退货声明。