1
class Group extends dbConnection { //Class for group, for ex. employe and employers.
    public $name;  // Name of group
    public $pdo;

    public function __construct ($name, dbConnection $pdo) {
    $this->pdo = $database->pdo;
    }

    public function getGroupList() {  
        try //                       FAULTY LINE BELOW \/\/\/\/\/\/\/
        {
          $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //to catch exceptions

          $stmt = $pdo -> query('SELECT id, Name, Skills FROM '.$this->name); //sql query with group name
          $list = $stmt->fetchAll(PDO::FETCH_NUM); //fetch statement into array
          $stmt -> closeCursor();
          unset($stmt);
          return var_dump($list); //gives pure data
        }
        catch(PDOException $e) 
        {
          return 'There was some error: ' . $e->getMessage();
        }
    }

}

そして dbConnect クラス:

  class dbConnection {
    public $pdo;
    public function __construct () {
        $this->dbConnect();
    }
    public function dbConnect () {
        if((count($_POST) == 6)&&($_GET['a'] == "connect")) {
            $host = $_POST['host'];
            $port = $_POST['port'];
            $username = $_POST['username'];
            $password = $_POST['password'];
            $database = $_POST['database']; 
            try{
                    $pdo = new PDO('mysql:host='.$host.';dbname='.$database.';port='.$port, $username, $password );
                    echo 'Connection successful!';
                    return $pdo;
            }
            catch(PDOException $e){
                    echo 'Error: ' . $e->getMessage();
            }   
        }
    }
}

そして実行:

$conn = new dbConnection;
$workers = new Group("workers", $conn);
$workers->getGroupList();

後:「接続に成功しました」というエラーが表示されます:

致命的なエラー: 14 行目の非オブジェクトに対するメンバー関数 setAttribute() の呼び出し

クラス Group は dbConnection から $pdo を取得しないと思います。何が間違っているのかわかりません。

4

1 に答える 1

0

変更 (dbConnect クラス内)

$pdo = new PDO('mysql:host='.$host.';dbname='.$database.';port='.$port, $username, $password );

$this->pdo = new PDO('mysql:host='.$host.';dbname='.$database.';port='.$port, $username, $password );

以下も変更

public function __construct ($name, $database) {
  $this->pdo = $database->pdo;
}

また、Groupクラスでは、$this->pdo代わりに使用します$pdo

于 2012-12-01T17:39:13.047 に答える