Los encabezados y la versión secundaria de la biblioteca cliente no coinciden

81

En PHP recibo la siguiente advertencia cada vez que intento conectarme a una base de datos (vía mysql_connect)

Advertencia: mysql_connect (): los encabezados y la versión secundaria de la biblioteca cliente no coinciden. Encabezados: 50162 Biblioteca: 50524

En mi php -isalida tengo los siguientes valores enumerados en mysqli

Versión de la biblioteca de API de cliente => 5.5.24

Versión del encabezado de la API del cliente => 5.1.62

Intenté actualizar php5-mysql y php, pero ya tengo la última versión de ambos. ¿Cómo puedo actualizar la versión del encabezado para dejar de ver esta advertencia?

EDITAR

Todos mis archivos MySQL deben actualizarse para que sean la última versión:

$ apt-get install mysql.*5.5
. . .
mysql-client-5.5 is already the newest version.
mysql-server-core-5.5 is already the newest version.
mysql-server-5.5 is already the newest version.
mysql-testsuite-5.5 is already the newest version.
mysql-source-5.5 is already the newest version.

Eliminar versiones antiguas

$ apt-get remove mysql.*5.1
. . .
Package handlersocket-mysql-5.1 is not installed, so not removed
Package mysql-cluster-client-5.1 is not installed, so not removed
Package mysql-cluster-server-5.1 is not installed, so not removed
Package mysql-client-5.1 is not installed, so not removed
Package mysql-client-core-5.1 is not installed, so not removed
Package mysql-server-5.1 is not installed, so not removed
Package mysql-server-core-5.1 is not installed, so not removed
Package mysql-source-5.1 is not installed, so not removed
Ian Hunter
fuente
también tendrás que actualizar las cosas de mysql. mysql-client o lo que sea.
Marc B
@MarcB Debería tener todas las últimas versiones de la suite MySQL (ver mi última edición)
Ian Hunter
1
La versión del "encabezado de la API del cliente" no se puede actualizar porque está codificada en el ejecutable de PHP. Eran los encabezados (y bibliotecas) de mysql instalados en el sistema del administrador de paquetes PHP en el momento en que se compiló PHP. No puede actualizarlos. Tiene que volver a las bibliotecas MySQL 5.1.X para que esa versión de PHP vuelva a funcionar, o actualizar PHP a una versión compilada con MySQL 5.5.X.
dAm2K
@ dAm2K Resultó que la versión se pudo actualizar intercambiando mi archivo mysqli.so actual por uno más nuevo.
Ian Hunter
1
Realmente no sé si hay una manera de verificar la compatibilidad ABI ... solo tiene que verificar apache error_log para ver si hay errores secundarios httpd extraños. Si después de 3-4 días no aparece el error, debería estar bien.
dAm2K

Respuestas:

31

Su PHP fue compilado con MySQL 5.1 pero ahora está vinculando una biblioteca mysql de la familia 5.5.X. Debe actualizar PHP a una versión compilada con MySQL 5.5 o revertir las bibliotecas cliente de mysql a 5.1.x.

dAm2K
fuente
1
Básicamente, este era el problema que estaba teniendo, pero en lugar de actualizar o degradar algo, pude extraer el archivo mysqli.so de un servidor con PHP compilado con MySQL 5.5 y simplemente pegarlo en mi directorio / usr / lib / php5 / . Sin embargo, no estoy seguro de que sea la ruta más segura a seguir, por lo que no quiero usarla como respuesta. Gracias por tu ayuda.
Ian Hunter
126

Estoy usando MariaDB y tengo un problema similar.

Desde el sitio MariaDB , se recomienda arreglarlo por

  1. Cambie a usar el controlador mysqlnd en PHP (solución recomendada).
  2. Ejecutar con un nivel de informe de errores más bajo:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Vuelva a compilar PHP con las bibliotecas cliente MariaDB.
  4. Utilice su biblioteca cliente MySQL original con MariaDB.

Mi problema se solucionó usando el controlador mysqlnd en Ubuntu:

sudo apt-get install php5-mysqlnd

¡Salud!


[actualización: información adicional] La instalación de este controlador también resuelve el problema de PDO que devuelve un valor entero como una cadena. Para mantener el tipo como entero, después de instalar mysqlInd, haga esto

$db = new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $pass, 
          array( PDO::ATTR_PERSISTENT => true));
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
conocido
fuente
4
Esta debería ser la respuesta, ya que esto también funciona con mysql
Justin E
1
Esto resolvió mi problema con la falta de coincidencia de mysql y php en Ubuntu. ¡Gracias!
jamescampbell
1
gracias, esto funciona para mysql cluster 7.30. Estoy muy contento con él: D
haidarvm
desactivar el informe de errores. esa es la mejor solución. : D
MaXi32
2
el mysqlnd con maria db y php7 funciona muy bien, ¡gracias por la respuesta!
Ricardo BRGWeb
68

Para la nueva familia MySQL 5.6, debe instalar php5-mysqlnd, no php5-mysql.

Eliminar esta versión del controlador mysql

sudo apt-get remove php5-mysql

E instala esto en su lugar

sudo apt-get install php5-mysqlnd
Carlos Buenosvinos Zamora
fuente
9
Por favor explique su respuesta algo. Cosas como lo que hacen estos paquetes.
Machavity
4
Para la nueva familia MySQL 5.6, debe instalar php5-mysqlnd, no php5-mysql.
Carlos Buenosvinos Zamora
Resolvió el problema. Me enfrentaba a este problema cuando actualicé MySql (instancia de AWS RDS MySql) de 5.5 a 5.6.
Rahul Prasad
3
Obviamente, es necesario reiniciar Apache para que esto funcione correctamente. Solo señalando lo obvio
Metafaniel
1
Esto rompió mi phpMyAdmin. Parece que phpMyAdmin no puede funcionar con el controlador nativo de MySQL.
Ehsan
23

Lo mismo funciona para MySQL:

sudo apt-get install php5-mysqlnd

Leí este hilo tratando de encontrar la solución para MySQL, y también vi la respuesta de Ken, pero ignoré la solución para MariaDB, perdiendo algunas horas de esa manera. No estaba claro para mí que lo mismo pudiera aplicarse a MySQL. Esta publicación es solo para ahorrarles las pocas horas que perdí.

marek
fuente
buena solución para mí, seguido de sudo systemctl restart mysql sudo systemctl restart apache2
Paul
Es mucho mejor hacer la instalación y dejar que las dependencias eliminen php5-mysql. A algunos sistemas no les gusta la purga de php5-mysql sin una alternativa.
Rui F Ribeiro
10

La razón principal de este error es que PHP se separó de las bibliotecas cliente MySQL hace algún tiempo. Entonces, lo que está sucediendo (principalmente en compilaciones más antiguas de Linux) es que la gente compilará PHP contra una compilación determinada del cliente MySQL (lo que significa que la versión de MySQL instalada es irrelevante) y no actualizará (en CentOS este paquete aparece como mysqlclientXX, donde XXrepresenta el numero de paquete). Esto también permite que el encargado del paquete admita versiones inferiores de MySQL. Es una forma desordenada de hacerlo, pero era la única, dado que PHP y MySQL usan diferentes licencias.

MySQLND resuelve el problema utilizando el propio controlador nativo de PHP (el ND), que ya no depende de MySQL Client. También está compilado para la versión de PHP que estás usando. Esta es una solución mejor en todos los aspectos, si no es por otra razón que MySQLND está hecho para que PHP hable con MySQL.

Si no puede instalar MySQLND, puede ignorar este error de forma segura en su mayor parte. Es más un aviso para su información que cualquier otra cosa. Simplemente suena aterrador.

Machavity
fuente
2

Para compilar php desde la fuente con el controlador nativo de MySQL (mysqlnd) ,

cd /php/source/path
./configure <other-options> --with-mysql --with-mysqli --with-pdo-mysql
make clean    # required if there was a previous make, which could cause various errors during make
make
make install

De /php/source/path/configure --help.

--with-mysql=DIR        Include MySQL support.  DIR is the MySQL base
                      directory, if no DIR is passed or the value is
                      mysqlnd the MySQL native driver will be used
--with-mysqli=FILE      Include MySQLi support.  FILE is the path
                      to mysql_config.  If no value or mysqlnd is passed
                      as FILE, the MySQL native driver will be used
--with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                      If no value or mysqlnd is passed as DIR, the
                      MySQL native driver will be used

Se pueden incluir una o más extensiones PHP MySQL usando estas opciones.
Si no se pasa un valor a estas opciones, o si el valor es mysqlnd, se usará el controlador nativo de MySQL.

Sithsu
fuente
Tu respuesta fue tan valiosa para mí. En ella, leí que tuve que usar AMBOS --with-mysqly --with-mysqliopciones para utilizar correctamente el controlador compilado. Así que hice de nuevo mi comando de configuración esta vez con: `--with-mysql = / home / stephane / programmes / mariadb / install \ --with-mysqli = / home / stephane / programmes / mariadb / install / bin / mysql_config` y se solucionó el problema. Ahora usa la versión correcta del cliente MariaDB.
Stephane
1

Tengo el mismo php en guerra en mi sitio de wordpress ...

Err: Advertencia: mysql_connect (): Los encabezados y la versión menor de la biblioteca cliente no coinciden. Encabezados: 50547 Biblioteca: 50628 en /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php en la línea 1515

Causa: Actualicé la versión 4.2 a 4.5 de wp (no coinciden PHP y MySql)

Cambié wp-db.php en la línea 1515

$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );

a

if ( WP_DEBUG ) {
    $this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
} else {
    $this->dbh = @mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
}

Se tiene sin errores de guerra en mi sitio de wordpress

OpenWebWar
fuente
Solo para su información, esto dejará de funcionar en PHP7 porque las funciones mysql_ han sido eliminadas
Machavity
1

Si tuvieras acceso a cpanel o whm para alojamiento web de dominio ...

En cPanel, vaya a la pestaña "Softwares y servicios", >> y luego haga clic en "Seleccionar versión de PHP" >> configure la versión deseada de php ...

Advertencia: mysql_connect (): los encabezados y la versión secundaria de la biblioteca cliente no coinciden.  Encabezados: 50547 Biblioteca: 50628 en chennaitechnologies.com

P.ej. Versión actual de PHP:

Versión de PHP [5.2] (lista de versiones de PHP disponibles 5.2, 5.3, 5.4, 5.5, 5.6)

Advertencia: es imposible cambiar los módulos php y las opciones php a través del selector de PHP para la versión nativa de php

Seleccioné la versión 5.6 php, después de que ese error se borró en mi sitio de blog de wordpress ...

OpenWebWar
fuente
1
Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
Headers:50547 Library:100026

Resolví el error anterior simplemente reconstruyendo mi Apache:

cPanel Version  56.0 (build 25)
Apache Version  2.4.18
PHP Version 5.5.30
MySQL Version   10.0.26-MariaDB
Servicios en línea Dot
fuente
0

Tengo estos problemas cuando uso Percona / MySQL 5.6 y el controlador php se compiló con 5.5 y se requiere php5-mysql para algunas aplicaciones, así que escribo un script para reconstruir los controladores.

https://github.com/falcacibar/php5-mysql-rebuild

Felipe Buccioni
fuente
0

Para WHM y cPanel, algunas versiones necesitan configurar explícitamente mysqli para compilar.

Usando WHM, bajo CENTOS 6.9 xen pv [dc] v68.0.27, se necesitaba reconstruir Apache / PHP mirando todas las opciones y seleccionar mysqli para construir. El valor predeterminado era construir el mysql obsoleto. Ahora los mensajes de depreciación se han ido y uno está listo para futuras actualizaciones de MySQL.

Bob P
fuente
0

Me encontré con el mismo problema en centos7. La eliminación de php-mysql y la instalación de php-mysqlnd solucionó el problema. Gracias Carlos Buenosvinos Zamora por tu sugerencia.

Aquí están mis comandos en centos7 en caso de que esto pueda ser de ayuda para alguien, ya que la mayoría de las respuestas aquí se basan en Debian / Ubuntu.

Para encontrar el paquete php-mysql instalado

yum list installed | grep mysql

Para eliminar el paquete php-mysql instalado

yum remove php55w-mysql.x86_64

Para instalar php-mysqlnd

yum install php-mysqlnd.x86_64
Agente 7
fuente
-1

Cambiar la versión de PHP de 5.6 a 5.5 Se corrigió .

Tienes que ir al panel de control> CGI Script y cambiar la versión de PHP allí.

Hammad Khan
fuente
Todos estamos tratando de pasar a la última versión sin retroceder en las versiones.
karmafunk