web-dev-qa-db-fra.com

En-tête et incompatibilité de version mineure de la bibliothèque client

Dans PHP, l'avertissement suivant s'affiche chaque fois que j'essaie de me connecter à une base de données (via mysql_connect)

Avertissement: mysql_connect (): Les en-têtes et la version mineure de la bibliothèque client ne correspondent pas. En-têtes: 50162 Bibliothèque: 50524

Dans ma sortie php -i, j'ai les valeurs suivantes répertoriées sous mysqli

Version de la bibliothèque de l'API client => 5.5.24

Version d'en-tête de l'API client => 5.1.62

J'ai essayé de mettre à jour php5-mysql et php mais je suis déjà à la dernière version des deux. Comment procéder pour mettre à jour la version d'en-tête afin de ne plus voir cet avertissement?

MODIFIER

Mes fichiers MySQL doivent tous être mis à jour pour être la dernière version:

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

Supprimer les anciennes versions

$ 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
78
Ian Hunter

Votre PHP a été compilé avec MySQL 5.1, mais il lie maintenant une bibliothèque mysql de la famille 5.5.X . Vous devez mettre à niveau PHP vers une version compilée avec MySQL 5.5 ou restaurer les bibliothèques client mysql à 5.1.x.

30
dAm2K

J'utilise MariaDB et j'ai le même problème.

Depuis MariaDB site , il est recommandé de le réparer en

  1. Utilisez le pilote mysqlnd dans PHP (solution recommandée).
  2. Exécuter avec un niveau de signalement d'erreur plus faible:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Recompilez PHP avec les bibliothèques clientes MariaDB.
  4. Utilisez votre bibliothèque cliente MySQL d’origine avec MariaDB.

Mon problème a été résolu en utilisant le pilote mysqlnd sous Ubuntu:

Sudo apt-get install php5-mysqlnd

À votre santé!


[mise à jour: informations supplémentaires] L'installation de ce pilote résout également le problème PDO qui renvoie une valeur entière sous forme de chaîne. Pour conserver le type entier, après avoir installé mysqlInd, faites ceci

$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);
122
ken

Pour la nouvelle famille MySQL 5.6, vous devez installer php5-mysqlnd, pas php5-mysql.

Supprimer cette version du pilote mysql

Sudo apt-get remove php5-mysql

Et installez ceci à la place

Sudo apt-get install php5-mysqlnd
66

La même chose fonctionne pour MySQL:

Sudo apt-get install php5-mysqlnd

J'ai lu ce fil de discussion en essayant de trouver la solution pour MySQL, et j'ai également vu la réponse de ken, mais j'ai ignoré la solution pour MariaDB, perdant ainsi quelques heures. Il n'était pas clair pour moi que la même chose pourrait s'appliquer à MySQL. Ce post est juste pour vous épargner les quelques heures que j'ai perdues.

23
marek

La raison principale de cette erreur est que PHP s'est séparé des bibliothèques du client MySQL il y a quelque temps. Donc, ce qui se passe (principalement sur les anciennes compilations de Linux), c’est que les gens compileront PHP contre une version donnée du client MySQL (ce qui signifie que la version de MySQL installée n’est pas pertinente) et non pas mise à niveau (dans CentOS, ce package est répertorié sous la forme mysqlclientXX, où XX représente le numéro de package). Cela permet également au mainteneur du paquet de prendre en charge les versions inférieures de MySQL. C'est une façon compliquée de le faire, mais c'était la seule façon, vu comment PHP et MySQL utilisent des licences différentes.

MySQLND résout le problème en utilisant le pilote natif de PHP (le ND), qui ne dépend plus du client MySQL. Il est également compilé pour la version de PHP que vous utilisez. C’est une meilleure solution dans l’ensemble, si pour aucune autre raison que MySQLND est conçu pour avoir PHP parler à MySQL.

Si vous ne pouvez pas installer MySQLND, vous pouvez ignorer en grande partie cette erreur en toute sécurité. C’est plus un avis FYI qu’autre chose. Cela semble effrayant.

10
Machavity

Pour compiler php depuis les sources avec Pilote natif 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

Un ou plusieurs PHP - extensions MySQL peuvent être inclus en utilisant ces options.
Si aucune valeur n’est transmise à ces options, ou si elle est mysqlnd, le pilote natif MySQL sera utilisé.

2
Sithsu

J'ai même php en guerre dans mon site wordpress ... 

Err: Avertissement: mysql_connect (): Les en-têtes et la version mineure de la bibliothèque client ne correspondent pas. En-têtes: 50547 Bibliothèque: 50628 dans /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php à la ligne 1515

Cause: j'ai mis à jour la version 4.2 à 4.5 de wp (incompatibilité PHP et MySql)

J'ai changé le fichier wp-db.php à la ligne 1515

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

à 

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 );
}

Son obtenu sans errer errer sur mon site wordpress

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

J'ai résolu l'erreur ci-dessus en reconstruisant simplement mon Apache:

cPanel Version  56.0 (build 25)
Apache Version  2.4.18
PHP Version 5.5.30
MySQL Version   10.0.26-MariaDB
1
Dot Online Services

Si vous aviez accès à cpanel ou à whm pour un hébergement Web de domaine ...

Dans cPanel, allez dans l'onglet "Logiciels et services", >> et cliquez ensuite sur "Sélectionner la version PHP" >> définissez la version de votre php désirée.

 Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50547 Library:50628 in chennaitechnologies.com

Par exemple . Version actuelle PHP: 

Version PHP [5.2] (liste des versions php disponibles des versions 5.2, 5.3, 5.4, 5.5, 5.6)

Avertissement: Il est impossible de modifier les modules php et les options php via PHP. Le sélecteur pour la version native en php

J'ai choisi la version 5.6 php, après que l'erreur soit effacée sur mon blog wordpress ...

1
OpenWebWar

J'ai ces problèmes lorsque j'utilise Percona/MySQL 5.6 et que le pilote php a été compilé avec la version 5.5 et que php5-mysql est requis pour certaines applications; j'écris donc un script pour reconstruire les pilotes.

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

0
Felipe Buccioni

Pour WHM et cPanel, certaines versions doivent expliquer la construction de mysqli.

En utilisant WHM, sous CENTOS 6.9 xen pv [dc] v68.0.27, il était nécessaire de reconstruire Apache/PHP en consultant toutes les options et en sélectionnant mysqli à construire. La valeur par défaut était de construire le mysql obsolète. Les messages d'amortissement ont maintenant disparu et l'un d'entre eux est prêt pour les futures mises à niveau de MySQL.

0
Bob P

Modification de la version PHP de la version 5.6 à la version 5.5 corrigée

Vous devez aller dans Panneau de configuration> Script CGI et changer la version PHP ici.

0
Hammad Khan