【问题标题】:Call to undefined method MDB2_Error::setFetchMode()调用未定义的方法 MDB2_Error::setFetchMode()
【发布时间】:2016-11-16 01:23:23
【问题描述】:

我正在使用 PEAR 的 MDB2 连接到我的 MySQL 数据库。

我以前从未遇到过问题,但这个特定的主机给我带来了问题。

起初我以为是用户凭据,但我已经使用标准MySQL 代码在同一个文件上测试成功连接。

 //Error Code
 Fatal error: Call to undefined method MDB2_Error::setFetchMode() in /home/topazmar/public_html/db/db.php on line 15

 //Php Code
 $this->conn=MDB2::connect(array(
        'phptype'  => 'mysql',
        'username' => DATABASE_USR,
        'password' => DATABASE_PWD,
        'hostspec' => DATABASE_HOST,
        'database' => DATABASE_NAME,
    ));
    $this->conn->setFetchMode(MDB2_FETCHMODE_ASSOC); //Line 15

编辑

我用转储输出 $this->conn

[0] => Array
            (
                [file] => /home/topazmar/public_html/db/MDB2.php
                [line] => 979
                [function] => PEAR_Error
                [class] => PEAR_Error
                [type] => ->
                [args] => Array
                    (
                        [0] => MDB2 Error: not found
                        [1] => -4
                        [2] => 1
                        [3] => 1024
                        [4] => unable to find package 'MDB2_Driver_mysql' file 'MDB2/Driver/mysql.php'
                    )

            )

我确实安装了 MDB2_Driver_mysql 1.4.1 以及 PEAR 和 MDB2...让我感到困惑,我不认为使用 modrewrites 会改变这一点。

【问题讨论】:

  • 连接失败,所以你得到了一个没有setFetchMode 方法的MDB2_Error
  • 运行echo $this->conn->getMessage() 以获取实际的错误消息。
  • 不错,但很糟糕:MDB2 Error: not found

标签: php mysql pear mdb2


【解决方案1】:

您的连接失败,您返回错误对象(MDB2_Error 类)而不是连接对象(扩展MDB2_Driver_Common 的类)。

使用PEAR::isError($this->conn)检查连接是否成功。

[编辑 - Hutber]

这意味着你还没有连接到数据库、密码问题、用户未授权等

【讨论】:

  • Strict Standards: Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in 不理想,我不完全明白为什么它不允许我这样做,但你去吧
  • 也许现在有另一种方法可以检查 PEAR 错误被返回,我已经很久没有接触 PEAR了。
  • 我在想也许我应该避免它:)
  • 您可以改用$this->conn instanceof PEAR_Error
  • 我认为得到了错误,几乎没有帮助:) 但是你的`解析错误:语法错误,/home/topazmar/public_html/db/db.php 中的意外 'PEAR' (T_STRING) 在线19` 查看更新的问题
【解决方案2】:

如果有人看到这个线程并且他们确实正确安装了 MDB2 和 db 驱动程序:我遇到了同样的问题,结果证明我为 db 用户设置的权限不足。杜拉

【讨论】:

    【解决方案3】:

    所以对我来说,解决问题就像从 pear 安装 MDB2 库一样简单。

    假设您已经安装了 PEAR:

    pear install MDB2 
    pear install MDB2#mysql
    

    从终端/cmd 窗口,然后我就可以走了。

    【讨论】:

    • 你不应该改变你的问题,而应该问一个新的问题。您的新问题和答案与原来的无关。
    • 但我认为问题没有改变......我认为您的回答没有解释如何解决它,抱歉。
    • 它确实发生了变化:第一个问题是你得到了MDB2_Error 对象。这也意味着安装了MDB2。移动到新服务器后,您遇到了另一个问题:MDB2 未安装。
    • +1 :) 好的,我得到了完全相同的错误Call to undefined method MDB2_Error::setFetchMode() 我没有看到对我有帮助的答案,但无论哪种方式,如果有人搜索这个问题,他们都会得到两个答案现在帮助他们:)
    • 不能自己加一个!再次需要它
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 2019-10-25
    • 2018-07-11
    • 2013-10-23
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多