非静态方法DB::connect()不应该被静态调用

5

我们最近将服务器升级到了5.4,并开始遇到以下错误:

Non-static method DB::connect() should not be called statically

我已经对此进行了全面研究,但是每个解决方案都没有起作用。我尝试关闭文件级别、目录级别和服务器级别的严格错误报告。浏览器中显示的实际错误是:

DB Error: connect failed module: /path/to/login_class.php line: 49

编辑:从lib_app.php发布完整代码:

<?php
/*--------------------------------------------------------------------------

 $RCSfile: lib_app.php,v $ 

 Purpose:   Defines App class. This class is a container for 
            application global variables such as database 
            connection.

 Copyright: 2003 ** Author Omitted **

---------------------------------------------------------------------------
    Functions:

    - none

    Classes:

        App - global application class, holds global variables  

---------------------------------------------------------------------------         
 $Log: lib_app.php,v $
 Revision 1.1.1.1  2004/08/05 23:50:39 ** Author Omitted **



--------------------------------------------------------------------------*/

if (!defined('PHP_APP')) 
    die('<br>'.__FILE__.': This program cannot function without application framework<br>');


class App{

    var $dsn;                           // db connection string
    var $db;                            // db connection object
    var $state;                         // application status
    var $debug =  CONFIG_DEBUG;         // debug status

    function App($dsn){

        $this->dsn  = $dsn;
        $this->db   = DB::connect($dsn);

        if (DB::isError($this->db)) {

            die($this->db->getMessage() . ' module: ' . __FILE__ . ' line: ' .  __LINE__ );
        }
    }   
} // class
?>

请问有没有人解决了这个问题,能够提供帮助吗?我已经参考了很多其他网站,包括 Stack 上的一些网站,但是都没有用。
补充一下,对于那些会要求我“学习 PDO”或者“把这个遗物埋掉并撒上盐”的人,虽然非常有趣且受到赞赏,请注意这不是我的代码。这实际上是一个应该被埋葬的古董。然而,这是一个后端客户管理程序,“随客户而来”,我们为其设计和编写了很多前端内容,客户特别要求不要触及管理员区域。如果我不为此付费,我不会重新编写整个东西,但我非常希望能够为广大的人们解决这个问题:
http://pear.php.net/bugs/bug.php?id=12057
http://forums.devshed.com/php-development-5/non-static-method-db-connect-should-not-be-called-statically-462291.html
http://php.brickhost.com/forums/index.php?topic=10756.0
https://dev59.com/KG445IYBdhLWcg3w0dZD
http://forums.phpfreaks.com/topic/265563-help-me-non-static-method-db/
http://forums.codewalkers.com/pear-packages-47/non-static-method-warnings-php-5t-4796.html
对于那些没有得到与特定情况相关的问题答案的广大群众,他们收到的更多是有关其陈旧代码的戳戳点点而不是其他任何东西。
让我向你介绍一下。我已经降级回 PHP 5.3,所以错误不再出现。一切都运行得很好。但是必须针对这个问题提供某种解决方案,这个解决方案在所有嘲笑和指责以及快速的“duh... turn off error reporting”(这不起作用)和非特定的声明为非静态变量的评论中被忽略了。没有 $@#!,伙计们。如果这么简单的话,我甚至不会在 Stack 上发布这个问题。

为了我的利益吗?不再是了。但事实上,将有许多寻找答案的人在其他地方找不到它们。我希望这里有人能找到解决方案。如果不行,相信我,我不会因此失眠。


你能发布一些 login_class.php 的代码吗?第 123 行(如果可能的话,完整代码更好)。 - Maximus2012
听起来你没有正确安装PEAR。 - Barmar
@Maximus2012 我打赌任何金额,第123行是 $this->db = DB::connect($dsn); - Barmar
实际上,我撤回之前的说法。第123行可能是 die(...) - Barmar
@Maximus2012,我完全错过了昨天的第一条评论。现在立即发布完整代码。 - FurryWombat
显示剩余7条评论
1个回答

1

抱歉,

但 Perl 已经过时了,或者它的继承者是 MDB2,考虑升级到像 PDO 这样的东西。

详情请参阅... PDO


1
所以本质上,由于这不是我的代码,我也不会免费重写6000行代码,我的唯一解决方案就是降级回到已弃用的PHP 5.3? - FurryWombat
1
如果你没有使用任何ORM或者你的代码已经采用了某些高级方式处理了SQL,那么答案是肯定的。这也是很多人不愿意从PHP5.3升级的原因之一。 - Zach dev
暂时降级回到5.3版本。尽快将这些家伙从我们的服务器上移除。 - FurryWombat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接