【问题标题】:Expand php pdo to support impala, but the setAttribute() function failed扩展php pdo支持impala,但是setAttribute()函数失败
【发布时间】:2016-01-16 14:08:18
【问题描述】:

扩展 php pdo 以支持 impala,但 setAttribute() 函数失败。 我的代码是:

class ImpalaPDO extends PDO {

    public function __construct($dsn, $username, $passwd, $options)
    {
        parent::__construct($dsn, $username, $passwd, $options);
        $impala = new ImpalaPDOStatement();
        $impala->test();
        $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('ImpalaPDOStatement', array($this)));
    }
}

class ImpalaPDOStatement extends PDOStatement {

    public function test() {
        print "aaa";
    }
}

错误信息是: SQLSTATE[HY000]:一般错误:PDO::ATTR_STATEMENT_CLASS 需要格式数组(类名,数组(ctor_args));类名必须是指定现有类的字符串。 我可以确认的是 ImpalaPDOStatement 存在,因为 $impala->test() 成功打印了一个字符串。所以我不知道错误信息是什么意思。

【问题讨论】:

  • 您的ImpalaPDOStatement 应该首先扩展PDOStatement。完成后,重试并调试任何进一步的问题。
  • @Mjh,不好意思忘记复制原代码,我贴上修改后的代码。我扩展了 PDOStatement,但错误消息总是一样的。你有其他建议吗?谢谢。

标签: php pdo impala


【解决方案1】:

您必须重写 PDOStatement 的受保护构造函数:

class ImpalaPDOStatement extends PDOStatement {
    public $dbh;

    // Constructor must be overrided
    protected function __construct($dbh) {
        $this->dbh = $dbh;
    }

    public function test() {
        print "aaa";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2014-04-22
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多