¿La clase mysqli personalizada tiene un error con php 5.4?

Acabo de actualizar mi servidor web a php 5.4 y recibo errores en mis sitios que usan mi clase de base de datos que se extiende desde mysqli incorporado. el error está en la última línea de mi clase y, a pesar del mensaje de error, todo funciona bien...

el mensaje de error:

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

y la clase es:

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....-_-

preguntado el 03 de mayo de 12 a las 19:05

¿Qué parte del mensaje de error no entiendes? -o- ¿Cuál es su pregunta? -

no entiendo el error en absoluto ... la clase funciona bien -

1 Respuestas

¿La clase mysqli personalizada tiene un error con php 5.4?

No, no es un error, sino una advertencia estándar estricta. Si considera que una advertencia es un error, entonces sí, su clase mysqli personalizada tiene un error con php 5.4.

La estricta advertencia estándar dice lo siguiente:

Si alguna vez tiene la intención de extenderse desde la clase base. la declaración de la función de conexión debe coincidir con la de la clase base:

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

En tu caso no:

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

Como puede ver, ambos tienen diferentes parámetros.

La solución en su caso es bastante trivial, simplemente reutiliza el primer parámetro, si NULL usted proporciona los propios valores predeterminados de la clase:

/*
 * 
 */
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();
    }
}

Tenga cuidado de que falten el puerto y el zócalo con su configuración predeterminada.

contestado el 03 de mayo de 12 a las 19:05

De mostrar? Desactivar display_errors probablemente. De lo contrario, debe usar los mismos parámetros o simplemente no extenderse desde mysqli. También actualicé la respuesta para que contenga más información. - hakré

@yamikoWebs: Acabo de agregar una solución simple, solo veo lo que necesita. - hakré

si, gracias. Perdón por la demora en aceptar la respuesta. No he estado en SO durante unos días. - Yamiko

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.