我查看了所有其他帖子,并且他们都没有提出我的问题是什么,所以我们走了:
$ 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是用于我之前包含的连接文件的内容。所以我知道所有这些都有效。
答案 0 :(得分: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'];
}