我看着这所有其他职位,他们没有想出什么我的问题是,所以在这里,我们去: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就是我之前使用的连接文件。所以我知道所有这些都在起作用。
这将是巨大的,如果你可以发布一个链接到一个小的PHP脚本重现问题(和SQLite内存数据库或左右)。没有冒犯,但我的猜测是查询以某种方式失败,并且你忘记打开[异常错误处理](http://php.net/manual/en/pdo.error-handling。php) – phihag
我有错误处理,查询工作,直到我把它放在一个while循环。此外与ninetwozero的职位,它正在工作。所以我发布我的课程和一切,以便我们可以得出这个想法。 – jefffan24
我使用neew代码更新了以前的文章,您可以使用它代替while循环。让我知道它是否按计划运作,否则我们必须以不同的方式处理它! – ninetwozero