PHP PDO: вызов функции-члена query () для необъекта - PullRequest
0 голосов
/ 05 марта 2012

Я явно сделал что-то довольно глупое здесь. Кто-нибудь может направить меня?

Вот как у меня все настроено:

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;        
}
}

Код страницы:

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);

Сообщение об ошибке:

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

Строка 20: $STH = $this->_db->query("SELECT FirstName FROM UserDetails WHERE TeamID = '$teamID'");

Что я сделал не так?

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

Я думаю, что

private $_db; 

не установлено, вы должны сделать что-то подобное

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;        
}

}
0 голосов
/ 05 марта 2012

Вы делаете экземпляр Team с $ db, но он никогда не вызывается в командном классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...