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
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.
J'utilise MariaDB et j'ai le même problème.
Depuis MariaDB site , il est recommandé de le réparer en
Exécuter avec un niveau de signalement d'erreur plus faible:
$err_level = error_reporting(0);
$conn = mysql_connect('params');
error_reporting($err_level);
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);
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
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.
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.
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é.
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
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
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.
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 ...
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.
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.
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.