我真的很难过,我在所有数据库驱动的项目中都使用过这种方法和几乎所有的代码。出于某种原因,这次它不起作用。
当我尝试使用数据库结果填充对象时,我收到以下错误:
Warning: PDOStatement::fetchAll() [pdostatement.fetchall]: SQLSTATE[HY000]: General error: could not call class constructor in D:\vhosts\hoet.co.uk\httpdocs\mobile\classes\Pages.php on line 67
问题是,如果我从数据库中获取单个记录,它就可以正常工作。
以下是单行和所有行的代码:
// Get a page
public static function get($search, $by = "id") {
$db = new Data;
$sql = $db->query("
SELECT *
FROM pages
WHERE $by = :search
");
$sql->bindParam(":search", $search);
$sql->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'Pages');
$sql->execute();
return $sql->fetchAll();
}
// Get all pages
public static function getAll($order = "title ASC") {
$db = new Data;
$sql = $db->query("
SELECT *
FROM pages
ORDER BY $order
");
//$sql->bindParam(":id", $id);
$sql->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'Pages');
$sql->execute();
return $sql->fetchAll();
} // This is line 67 in my file
我还在类中为每个数据库列设置了私有变量。
这个项目的唯一区别是它是一个MS数据库并使用PDO mssql驱动程序而不是普通的MySQL。
答案 0 :(得分:-1)
听起来像个错误。
我会尝试在当时排一行,调整一下:
public static function getAll($order = "title ASC") {
$db = new Data;
$sql = $db->query("
SELECT *
FROM pages
ORDER BY $order
");
$sql->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'Pages');
$sql->execute();
// get one row at the time
$data = array();
while($row = $sql->fetch()){
array_push($data, $row);
}
return $data;
}