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」は、クエリメソッドにアクセスしようとしている別のクラスである必要があります...コードをもう一度見てください。

最後に、return ステートメントがありません。

于 2013-03-11T15:55:35.193 に答える