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 -i
salida 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
Respuestas:
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.
fuente
Estoy usando MariaDB y tengo un problema similar.
Desde el sitio MariaDB , se recomienda arreglarlo por
Ejecutar con un nivel de informe de errores más bajo:
$err_level = error_reporting(0); $conn = mysql_connect('params'); error_reporting($err_level);
Mi problema se solucionó usando el controlador mysqlnd en Ubuntu:
¡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);
fuente
Para la nueva familia MySQL 5.6, debe instalar php5-mysqlnd, no php5-mysql.
Eliminar esta versión del controlador mysql
E instala esto en su lugar
fuente
Lo mismo funciona para MySQL:
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í.
fuente
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
, dondeXX
representa 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.
fuente
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.fuente
--with-mysql
y--with-mysqli
opciones 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.Tengo el mismo php en guerra en mi sitio de wordpress ...
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
fuente
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 ...
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 ...
fuente
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
fuente
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
fuente
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.
fuente
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
Para instalar php-mysqlnd
fuente
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í.
fuente