PDO - вызов функции-члена fetch () для необъекта? - PullRequest
1 голос
/ 31 июля 2011

Я просмотрел все остальные посты по этому вопросу, и ни одна из них не пришла точно с моей проблемой, так что здесь мы идем:

$ dbh хранит мое соединение PDO, если я делаю на него дамп var, он возвращает:

object(PDO)#1 (0) { }

Итак, я знаю, что мое соединение PDO работает.Затем я использую $ sth для хранения моего запроса:

$c = 2;
$sth = $dbh->query("SELECT * FROM table WHERE ID = " . $c);

Затем, чтобы убедиться, что это работает, я сделал:

echo $sth->rowCount();

Это возвращает значение 6. Так что я знаю, что этохватая несколько строк.Мой следующий шаг проверки моей проблемы состоял в том, чтобы выбрать одну строку, как показано ниже:

$row = $sth->fetch()
print_r($row);

Это вернуло одну строку (как и должно быть) с массивом $ row, заполненным точно так, как я ожидал (столбец)имена в качестве ключей и значения столбцов в качестве значения массива).

Таким образом, мы хороши до этого момента.После того, как я переместил $ row = $ sth-> fetch () в цикл while, мой скрипт завершается с ошибкой, которую он возвращает: Вызов функции-члена fetch () для необъекта

Вот мой цикл while:

while($row = $sth->fetch()){
    //while loop stuff here
}

Я знаю, что это как-то связано с состоянием цикла, потому что даже когда я закомментирую весь материал в середине, он все равно не работает.Что я делаю неправильно?Почему это не работает?Я запутался в этом, так как он работал в прошлом со всеми PDO, которые я делал, но по какой-то причине в этом сценарии происходит сбой.

Если у кого-нибудь есть какие-либо советы или что-то, что может помочь, оно будет очень признательно.

РЕДАКТИРОВАТЬ Так как пост ninetwozero работал, я публикую свой класс и в основном все, что янужно выяснить это.

class html_elements {

var $units;
var $useMaps;
var $cid;
var $uid;
var $companyMoney;
var $currCity;
var $terminals;
var $termLocs;
var $cityArray;
var $cargoArray;
var $cargo;
var $tid;
var $truckArray;
var $load;
var $cityID;
var $cargoID;
var $xp;
var $gasPrice;
var $warning;

function __construct($u, $maps, $c, $userID, $cMoney, $dbh, $city, $tid, $xp){
    $this->units = $u;
    $this->useMaps = $maps;
    $this->cid = $c;
    $this->uid = $userID;
    $this->companyMoney = $cMoney;
    $this->currCity = $city;
    $this->terminals = array();
    $this->termLocs = array();
    $this->cityArray = array();
    $this->cargoArray = array();
    $this->cargo = array();
    $this->tid = $tid;
    $this->truckArray = array();
    $this->load = 0;
    $this->cityID = array();
    $this->cargoID = array();
    $this->xp = $xp;
    $this->gasPrice = 0;

    $sth = null;
    $sth = $dbh->query("SELECT * FROM tblCTerminals WHERE companyID = " . $c);
            //THIS LOOP FAILS
    while($row = $sth->fetch()){
        $this->termLocs[] = $row['Location'];
    }
}

Затем в другом файле, в который включен мой файл классов:

$h = new html_element($u->get_units(), $u->get_maps(), $u->get_company(), $u->get_user_id(), $c->get_money(), $dbh, $u->get_city(), $u->get_truck_id(), $u->get_xp());

Каждый из этих геттеров работает, я проверил их,Также $ dbh - это то, что используется моим файлом подключения, который включен прежде всего.Так что я знаю, что все это работает.

1 Ответ

1 голос
/ 31 июля 2011

Я должен сказать, что вы столкнулись с довольно интересной ошибкой, поэтому давайте попробуем кое-что выяснить:

<code>if( $sth == null ) die('My sth is null at #1');
while( $row = $sth->fetch() ) {
    if( $row == null ) die('My row is null at #2');
    echo '<pre>';
    print_r($row);
    echo '
';}

Дайте мне знать, что это говорит вам.

Редактировать:

$sql = 'SELECT * FROM tblCTerminals WHERE companyID = ' . $c;
if( intval($c) == 0 ) { die('Aaaaaaaaaa.......aaaaah.');
foreach ($dbh->query($sql) as $row) {
    echo '$row[\'Location\'] is: ' . $row['Location'] .'<br />';
    $this->termLocs[] = $row['Location'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...