Chuck Le Butt
Chuck Le Butt

Reputation: 48758

PHP PDO: Call to a member function query() on a non-object

I've clearly done something quite silly here. Can anyone guide me?

Here's how I have things set up:

Database.php:

class Database extends PDO {

/**
 * Connect
 */
public function __construct($file = 'db_config.ini') {
    if (!$settings = parse_ini_file($file, TRUE)) throw new exception('Unable to open ' . $file . '.');

    $dns = $settings['database']['driver'] .
    ':host=' . $settings['database']['host'] .
    ((!empty($settings['database']['port'])) ? (';port=' . $settings['database']['port']) : '') .
    ';dbname=' . $settings['database']['schema'];

    parent::__construct($dns, $settings['database']['username'], $settings['database']['password']);
}

}

Team.php:

class Team {

private $_db;     

/**
 * getTeamMembers - Get team member UserIDs from TeamID
 * 
 * @param int $teamID
 * @return array UserIDs 
 */
public function getTeamMembers($teamID) {
    $result = "";
    $STH = $this->_db->query("SELECT FirstName FROM UserDetails WHERE TeamID = '$teamID'");
    $result = $STH->setFetchMode(PDO::FETCH_OBJ);

    return $result;        
}
}

Page code:

try {
    $db = new Database();
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  
    $team = new Team($db);
}
catch (PDOException $e) {
    echo "<p>Error connecting to database: </p>".$e->getMessage();
}

$teamMembers = $team->getTeamMembers($teamID);

Error message:

Call to a member function query() on a non-object in Team.php on line 20

Line 20: $STH = $this->_db->query("SELECT FirstName FROM UserDetails WHERE TeamID = '$teamID'");

What have I done wrong?

Upvotes: 0

Views: 3105

Answers (2)

stUrb
stUrb

Reputation: 6832

You're making a instance of Team with an $db but it never gets called in the team-class.

Upvotes: 0

Nicola Peluchetti
Nicola Peluchetti

Reputation: 76880

I think that

private $_db; 

is not set you should do something likje

class Team {

private $_db;     

function __construct($db){
   $this->_db = $ddb
}

public function getTeamMembers($teamID) {
    $result = "";
    $STH = $this->_db->query("SELECT FirstName FROM UserDetails WHERE TeamID = '$teamID'");
    $result = $STH->setFetchMode(PDO::FETCH_OBJ);

    return $result;        
}

}

Upvotes: 3

Related Questions