2011-07-31 57 views
1

我看着這所有其他職位,他們沒有想出什麼我的問題是,所以在這裏,我們去:PDO - 調用一個非對象的成員函數fetch()?

$胸徑商店我的PDO連接,如果我做一個變種轉儲就可以了,它返回:

object(PDO)#1 (0) { } 

所以我知道我的PDO連接正在工作。然後我用$某物握住我的查詢:

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

然後,以確保這工作我做:

echo $sth->rowCount(); 

返回的值6。所以,我知道這是抓住了一些行。我檢查我的問題的下一步是獲取單行如下所示:充滿到底我希望它(列名與$ row數組

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

這回單行(因爲它應該)鍵和列值作爲數組值)。

所以我們很好。一旦我將$ row = $ sth-> fetch()移入while循環,我的腳本就會失敗,返回的錯誤是:調用非對象的成員函數fetch()

這是我的while循環:

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

我知道它與循環的條件有關,因爲即使我在中間註釋掉所有的東西,它仍然不起作用。我究竟做錯了什麼?爲什麼這不工作?我對這一點感到困惑,因爲它在過去與我所做的所有PDO一起工作,但由於某種原因,它在這個腳本中失敗了。

如果任何人有任何提示或東西,可以幫助它將不勝感激。

編輯由於九twozero的職位工作,我發佈我的課程,基本上我得到這個想法的一切。

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

這將是巨大的,如果你可以發佈一個鏈接到一個小的PHP腳本重現問題(和SQLite內存數據庫或左右)。沒有冒犯,但我的猜測是查詢以某種方式失敗,並且你忘記打開[異常錯誤處理](http://php.net/manual/en/pdo.error-handling。php) – phihag

+0

我有錯誤處理,查詢工作,直到我把它放在一個while循環。此外與ninetwozero的職位,它正在工作。所以我發佈我的課程和一切,以便我們可以得出這個想法。 – jefffan24

+0

我使用neew代碼更新了以前的文章,您可以使用它代替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

相關問題