94 votes

Incohérence entre les en-têtes et la version mineure de la bibliothèque client

En PHP, j'obtiens l'avertissement suivant lorsque j'essaie de me connecter à une base de données (par l'intermédiaire de l'application mysql_connect )

Attention : mysql_connect() : La version mineure des en-têtes et de la bibliothèque client ne correspond pas. En-têtes:50162 Bibliothèque:50524

Dans mon php -i J'ai les valeurs suivantes listées sous mysqli

Version de la bibliothèque API client => 5.5.24

Version de l'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 puis-je mettre à jour la version de l'en-tête pour ne plus voir cet avertissement ?

EDIT

Mes fichiers MySQL devraient 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.

Suppression des 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

132voto

ken Points 489

J'utilise MariaDB et j'ai un problème similaire.

En Site MariaDB il est recommandé de le réparer en

  1. Passez à l'utilisation du pilote mysqlnd en PHP (solution recommandée).
  2. Recompilez PHP avec les bibliothèques clientes de MariaDB.
  3. Utilisez votre bibliothèque client MySQL originale avec MariaDB.

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

sudo apt-get install php5-mysqlnd

[Mise à jour : informations supplémentaires] L'installation de ce pilote résout également le problème de PDO qui renvoie les valeurs entières sous forme de chaîne. Pour conserver le type d'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);

70voto

Pour la nouvelle famille MySQL 5.6, vous devez installer php5-mysqlnd, et non 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

32voto

dAm2K Points 3283

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

23voto

marek Points 361

Le même principe s'applique à 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 pouvait s'appliquer à MySQL. Ce post est juste pour vous épargner les quelques heures que j'ai perdues.

12voto

Machavity Points 7587

La raison principale de cette erreur est que PHP s'est séparé des bibliothèques du client MySQL il y a quelques temps. Ce qui se passe (principalement sur les anciennes compilations de Linux) est que les gens compilent PHP contre une version donnée du client MySQL (ce qui signifie que la version de MySQL installée n'a pas d'importance) et non la mise à niveau (dans CentOS, ce paquet est répertorié en tant que mysqlclientXX donde XX représente le numéro du paquet). Cela permet également au mainteneur du paquet de supporter les versions inférieures de MySQL. C'est une façon désordonnée de procéder, mais c'était la seule façon de procéder étant donné que 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, ne serait-ce que parce que MySQLND est conçu pour que PHP parle à MySQL.

Si vous ne pouvez pas installer MySQLND, vous pouvez ignorer cette erreur dans la plupart des cas. Il s'agit plus d'un avis FYI qu'autre chose. Cela semble juste effrayant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X