2011-07-31 151 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

相关问题