0

共通のデータベースを共有するモデルを定義しています。ただし、を介して PDO オブジェクトを渡すのに問題がありますrequire_once()。次のエラーが表示されます。

Fatal error: Call to a member function prepare() on a non-object...

これは単に範囲の問題だと思います。$database両方のファイルでとして宣言しようとしましたglobalが、うまくいかないようでした。何か案は?

common.php

$host = 'localhost';
$dbname = 'database';
$username = 'user';
$password = 'pass';

$database = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, array(PDO::ATTR_PERSISTENT => true));

製品.php

require_once('common.php');

class Product {

  function fetch_from_category($category) {
    $query = $database->prepare('SELECT * FROM product WHERE product.category = ?');
    $query->execute($category);
    return $query->fetchAll(PDO::FETCH_ASSOC);
  }

}
4

2 に答える 2

1

クラスに渡し$database、それをプロパティとして保存し、次のようにアクセスし$this->databaseます。

class Product {

  protected $database;

  public function setDb($db)
  {
      $this->database = $db;
  }

  function fetch_from_category($category) {
    $query = $this->database->prepare('SELECT * FROM product WHERE product.category = ?');
    $query->execute($category);
    return $query->fetchAll(PDO::FETCH_ASSOC);
  }

}

$p = new Product();
$p->setDb($database);
于 2012-11-27T12:41:29.437 に答える
1

これは確かにスコープの問題で$databaseあり、 内で定義されていませんProduct::fetch_from_category。インスタンス化するときにオブジェクトに渡す必要があります。

class Product {

  protected $database;

  public function __construct(PDO $database) {
      $this->database = $database;
  }

  public function fetch_from_category($category) {
      $query = $this->database->prepare('SELECT * FROM product WHERE product.category = ?');
      $query->execute($category);
      return $query->fetchAll(PDO::FETCH_ASSOC);
  }

}

...

require_once 'common.php';
require_once 'product.php';

$product = new Product($database);
于 2012-11-27T12:42:03.853 に答える