2

我一直在玩弄 PDO 来尝试为结果创建一个默认返回类,并使其成为一般的默认行为。

这使我发现我需要扩展PDOStatement以便它在实例化时设置我的默认类。

代码中没有明显的错误。

当我在 DB 包装器中创建 PDO 实例时,我将 DB 句柄设置为使用我的扩展语句类,并将类名作为结果类的参数传递。我通常会使用 stdClass 但相反,我创建了一个简单的类扩展ArrayObject.

$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_CLASS);
$pdo->setAttribute(
    PDO::ATTR_STATEMENT_CLASS,
    array(
        'DatabaseStatement',
         array('DatabaseRow')
    )
);

这一切看起来都很好,但我收到以下错误:

SQLSTATE[HY000]: General error: Invalid class name (should be a string)

这不是最好的错误消息,也没有真正提供有关错误发生的原因或位置的任何信息,但我相信这是由于上面的部分,因为一旦我删除了该部分,它就不会发出错误了。

希望有人能给我一个前进的方向,因为我已经在 Google/SO-ing 一段时间了,但是,唉,无济于事。

提前感谢您,如果我提供的内容不够,请随时询问更多信息:]

4

1 回答 1

0

嗯,我已经解决了这个问题。我的功能之一是将扩展 PDOStatement 类中的一个方法中的参数覆盖为null,从而导致我的自定义行类被替换。哎呀。

这是一件很容易错过的事情。当你离开一个项目很短一段时间然后又回来的时候,你会注意到什么!哈哈哈……呃,不好意思。

于 2012-09-06T14:35:46.263 回答