扩展PDOStatement以使用默认FETCH_CLASS。将类名称视为字符串

时间:2012-09-06 12:55:30

标签: php pdo pdostatement

我一直在用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)

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

希望有人可以给我一个方向,因为我已经谷歌/ SO-ing一段时间了,但是唉,无济于事。

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

1 个答案:

答案 0 :(得分:0)

叹息

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

这是一件很容易错过的事情。令人惊讶的是,当你离开一个项目一小段时间然后再回到它时你注意到了!哈哈哈......唉,尴尬。