2011-07-31 36 views
1

私はこれに関する他のすべての投稿を見て、どれも私の問題がここにあるので正確に思い付いたわけではありません:PDO - 非オブジェクト上のメンバ関数fetch()を呼び出しますか?

$ dbhは私のPDO接続を保存します。 :

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 = $ sth-> fetch()をwhileループに移動すると、スクリプトはエラーを返します。非オブジェクトのメンバ関数fetch()を呼び出す

ここに私のwhileループがあります。

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

私はそれがループの状態と関係があることを知っています。中間のすべてのものをコメントアウトしてもまだ動作していないからです。私は間違って何をしていますか?なぜこれは動作しませんか?私はこれまでのすべてのPDOで過去に働いていたが、何らかの理由でこのスクリプトで失敗しているので、これを混乱させることはありません。

誰かがヒントや何かを持っていれば、大いに感謝します。

EDIT 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は他のものの前に含まれている接続ファイルで使われているものです。だから私はそれがすべて働いていることを知っている。

+0

あなたは(sqliteのインメモリ・データベースまたはそうで)問題を再現する小さなPHPスクリプトへのリンクを投稿することができればそれは素晴らしいことです。犯罪はありませんが、私の推測は何とか失敗してクエリが実行され、[例外エラー処理](http://php.net/manual/en/pdo.error-handling)を有効にするのを忘れてしまいました。php) – phihag

+0

エラー処理があり、whileループに入れるまではクエリは機能します。また、ninetwozeroの投稿と一緒に働いています。だから私は私のクラスとすべてを投稿しているので、私たちはこれを理解することができます。 – jefffan24

+0

私は以前の投稿を、whileループの代わりに使用できる新しいスニペットで更新しました。それが計画どおりに機能するかどうか教えてください。 – ninetwozero

答えて

1

私はあなたがかなり興味深いエラーが発生しましたことを言って、それでは、原因を特定するためにいくつかのことを試してみましょうになった:

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 '</pre>'; 
} 

は、私はこれがあなたに伝え何を知ってみましょう。

編集:

$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']; 
} 
+0

そして今私はもっと混乱しています:(それは働いていました、各行が印刷されました私のクラスは私のクラスと私がやろうとしているものと失敗しているものを編集するために編集しました。考え出した。 – jefffan24

関連する問題