【问题标题】:PDO error with FETCH_CLASS: General error: could not call class constructorFETCH_CLASS 的 PDO 错误:一般错误:无法调用类构造函数
【发布时间】:2014-07-29 22:32:44
【问题描述】:

我对此感到非常困惑,我在所有数据库驱动的项目中都使用了这种方法和几乎完全相同的代码。由于某种原因,这次它无法正常工作。

当我尝试使用数据库结果填充对象时出现以下错误:

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。

【问题讨论】:

  • 好的,所以看来如果我将被拉到 25 行以下的行数限制它会起作用。这似乎是一个荒谬的限制!
  • 既然使用了query(),还需要再次执行吗?并尝试将变量设置为公共
  • $db->query 是 Data 类的一个函数,基本上是一个缩短的准备。我知道现在问题出在哪里,mssql 驱动程序不允许一次返回超过 24 行,我不知道为什么,也不知道如何解决它!

标签: php sql-server class oop pdo


【解决方案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;
}

【讨论】:

  • 这还会将结果推送到我的类对象吗?
  • 这将构建相同的数组,逐一获取行
  • 仍然不适合我。我认为不再是 mssql PDO 驱动程序是对的吗?
  • 你为什么说它在你获取少于 25 行时它正在工作,但在使用 while 时却不行?不是比25少一吗?您可能必须明确指定获取模式->fetch(PDO::FETCH_CLASS)
猜你喜欢
  • 2016-12-11
  • 2013-06-20
  • 2012-07-01
  • 2019-03-21
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多