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()”。因为我不太了解错误消息,这里到底发生了什么?如果我使用 query 方法查询我的数据库,它工作得很好,但是如何使用 prepare 方法绑定值?

4

2 回答 2

1

在:

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

您忘记返回结果。(您还忘记了代码段中函数的名称。)

错误消息很清楚,您正在调用不是对象的方法。在这种情况下,您调用它是NULL因为您自己的准备方法不返回任何内容。

于 2013-03-11T15:44:54.300 回答
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”应该是您尝试访问其查询方法的另一个类...再次查看您的代码。

最后我你错过了一个退货声明。

于 2013-03-11T15:55:35.193 回答