1

我刚刚将我的网络服务器升级到 php 5.4,并且在使用从内置 mysqli 扩展的数据库类的网站上遇到错误。错误出现在我班级的最后一行,尽管出现错误消息,但一切正常......

错误信息:

Strict Standards: Declaration of yamiko_mysqli::connect() should be compatible with mysqli::connect($host = NULL, $user = NULL, $password = NULL, $database = NULL, $port = NULL, $socket = NULL) in /home/markwe6/public_html/_php/yamiko_mysqli.php on line 109

课程是:

class Yamiko_mysqli extends mysqli
{
    public $host='localhost';
    public $user='markwe6_yamiko';
    public $pass='1chrysanthemum!';
    public $db='markwe6_cp';
    public $result=NULL;#stores most recent result

    /*
     * 
     */
    public function __construct($auto=TRUE)
    {
        if($auto)
        {
            return $this->connect();
        }else
        {
            return TRUE;
        }
    }

    /*
     * 
     */
    public function connect($auto=TRUE, $user=NULL, $pass=NULL, $host=NULL, $db=NULL)
    {
        if($auto)
        {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);
            return $this->check_error();
        }else
        {
            parent::__construct($host, $user, $pass, $db);
            return $this->check_error();
        }
    }

    /*
     * 
     */
    public function query($sql)
    {
        $result=parent::query($sql);
        if($this->check_error())
            return FALSE;
        $this->result=$result;
        return $result;
    }

    /*
     * 
     */
    private function check_error()
    {
        if($this->connect_error!=NULL)
        {
            $GLOBALS['yamiko']->set_error('yamiko_myslqi connection error: '.$this->connect_error);
            return FALSE;
        }elseif ($this->error!=NULL)
        {
            $GLOBALS['yamiko']->set_error('yamiko_myslqi error: '.$this->error);
            return FALSE;
        }
    }
}#this is line 109....-_-
4

1 回答 1

4

自定义 mysqli 类与 php 5.4 有错误?

不,不是错误,而是严格的标准警告。如果您认为警告是错误,那么是的,您的自定义 mysqli 类在 php 5.4 中存在错误。

严格的标准警告内容如下:

如果您打算从基类扩展。连接函数的声明必须与基类之一匹配:

mysqli::connect($host = NULL, $user = NULL, $password = NULL, $database = NULL, $port = NULL, $socket = NULL)

在您的情况下,它不会:

Yamiko_mysqli::connect($auto=TRUE, $user=NULL, $pass=NULL, $host=NULL, $db=NULL)

如您所见,两者都有不同的参数。

NULL在您的情况下,修复相当简单,如果您提供类自己的默认值,您只需重新使用第一个参数:

/*
 * 
 */
public function connect($host = NULL, $user = NULL, $password = NULL, $database = NULL, $port = NULL, $socket = NULL)
{
    if($host === NULL)
    {
        parent::__construct($this->host, $this->user, $this->pass, $this->db);
        return $this->check_error();
    }else
    {
        parent::__construct($host, $user, $password , $database, $port, $socket);
        return $this->check_error();
    }
}

请注意默认配置中缺少端口和套接字。

于 2012-05-03T18:20:25.660 回答