ヘッダーとクライアントライブラリのマイナーバージョンの不一致


81

PHPでは、(経由でmysql_connect)データベースに接続しようとすると、次の警告が表示されます。

警告:mysql_connect():ヘッダーとクライアントライブラリのマイナーバージョンの不一致。ヘッダー:50162ライブラリ:50524

私のphp -i出力では、mysqliの下に次の値がリストされています

クライアントAPIライブラリのバージョン=> 5.5.24

クライアントAPIヘッダーバージョン=> 5.1.62

php5-mysqlphpを更新しようとしましたが、すでに両方の最新バージョンになっています。この警告が表示されなくなるようにヘッダーバージョンを更新するにはどうすればよいですか?

編集

私のMySQLファイルはすべて最新バージョンに更新する必要があります。

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

古いバージョンの削除

$ 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

mysqlのものも更新する必要があります。mysql-clientなど。
マークB

@MarcB MySQLスイートの最新バージョンをすべて用意する必要があります(最新の編集を参照)
Ian Hunter

1
「クライアントAPIヘッダー」バージョンは、PHP実行可能ファイルにハードコードされているため、アップグレードできません。これらは、PHPがコンパイルされたときにPHPパッケージマンテナーのシステムにインストールされたmysqlヘッダー(およびライブラリ)でした。それらをアップグレードすることはできません。そのバージョンのPHPを再び機能させるには、MySQL 5.1.Xライブラリにフェールバックするか、PHPをMySQL5.5.Xでコンパイルされたバージョンにアップグレードする必要があります。
dAm2K 2012年

dAm2K @それはバージョンが判明したようだった新規の方と私の現在のmysqli.soファイルをスワップアウトすることでアップグレードすることができ。
イアンハンター

1
ABIの互換性をチェックする方法があるかどうかは本当にわかりません... apacheerror_logで奇妙なhttpdの子エラーをチェックする必要があります。3〜4日経ってもエラーが発生しない場合は、問題ないはずです。
dAm2K 2012年

回答:


31

PHPはMySQL5.1でコンパイルされましたが、現在は5.5.Xファミリのmysqlライブラリをリンクしています。PHPをMySQL5.5でコンパイルされたバージョンにアップグレードするか、mysqlクライアントライブラリを5.1.xに戻す必要があります。


1
基本的にこれは私が抱えていた問題でしたが、何かをアップグレードまたはダウングレードするのではなく、MySQL 5.5でコンパイルされたPHPを使用してサーバーからmysqli.soファイルをプルし、/ usr / lib / php5 /ディレクトリに貼り付けることができました。 。それが最も安全なルートかどうかはわかりませんが、それを頼りになる答えとして使いたくありません。ご協力いただきありがとうございます。
イアンハンター

126

MariaDBを使用していますが、同様の問題があります。

MariaDBサイトから、次の方法で修正することをお勧めします

  1. PHPでmysqlndドライバーを使用するように切り替えます(推奨ソリューション)。
  2. より低いエラー報告レベルで実行します。

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. MariaDBクライアントライブラリを使用してPHPを再コンパイルします。
  4. MariaDBで元のMySQLクライアントライブラリを使用します。

Ubuntuでmysqlndドライバーを使用することで修正された問題:

sudo apt-get install php5-mysqlnd

乾杯!


[更新:追加情報]このドライバーをインストールすると、整数値を文字列として返すPDOの問題も解決されます。型を整数のままにするには、mysqlIndをインストールした後、これを実行します

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

4
これはmysqlでも機能するため、これが答えになるはずです
Justin E

1
これにより、Ubuntuでのmysqlとphpの不一致に関する私の問題が解決しました。ありがとう!
jamescampbell 2015

1
おかげでこれはmysqlクラスター7.30で動作します。私はそれにとても満足しています:D
haidarvm 2015

エラー報告をオフにします。それが最善の解決策です。:D
MaXi32 2016年

2
maria dbとphp7を使用したmysqlndはうまく機能します、答えてくれてありがとう!
リカルドBRGWeb 2016年

68

新しいMySQL5.6ファミリの場合、php5-mysqlではなくphp5-mysqlndをインストールする必要があります。

このバージョンのmysqlドライバーを削除します

sudo apt-get remove php5-mysql

代わりにこれをインストールしてください

sudo apt-get install php5-mysqlnd

9
あなたの答えをいくつか説明してください。これらのパッケージが行うことのようなもの。
マカビティ

4
新しいMySQL5.6ファミリの場合、php5-mysqlではなくphp5-mysqlndをインストールする必要があります。
Carlos Buenosvinos Zamora 2014

それは問題を解決しました。MySql(AWS RDS MySqlインスタンス)を5.5から5.6にアップグレードしたときに、この問題に直面していました。
Rahul Prasad 2014

3
これが正しく機能するには、明らかにApacheを再起動する必要があります。明白なことを指摘するだけ
Metafaniel 2015年

1
これは私のphpMyAdminを壊しました。phpMyAdminはMySQLネイティブドライバーでは機能しないようです。
Ehsan 2015

23

同じことがMySQLでも機能します。

sudo apt-get install php5-mysqlnd

MySQLの解決策を見つけようとしてこのスレッドを読み、kenの答えも見ましたが、MariaDBの解決策を無視し、その方法で数時間を無駄にしました。同じことがMySQLにも当てはまるかどうかは私にはわかりませんでした。この投稿は、私が失った数時間を節約するためのものです。


私にとっては良い修正であり、その後にsudo systemctl restart mysql sudo systemctl restart apache2
Paul

インストールを実行し、依存関係でphp5-mysqlを削除することをお勧めします。一部のシステムは、代替手段なしでphp5-mysqlのパージを好まない。
Rui F Ribeiro 2017年

10

このエラーの根本的な理由は、PHPが少し前にMySQLクライアントライブラリから分離したことです。何(主にLinuxの以前のコンパイルに)起こっていることは、人々が反対PHPをコンパイルするということですので、MySQLのクライアントの特定のビルドとして、このパッケージがリストされているCentOSの中(アップグレード(無関係なインストールのMySQLのバージョンを意味する)とないmysqlclientXX場合には、XX表しパッケージ番号)。これにより、パッケージメンテナはMySQLの下位バージョンをサポートすることもできます。これは面倒な方法ですが、PHPとMySQLが異なるライセンスを使用する方法を考えると、これが唯一の方法でした。

MySQLNDは、MySQLクライアントに依存しなくなったPHP独自のネイティブドライバー(ND)を使用して問題を解決します。また、使用しているPHPのバージョン用にコンパイルされています。これは、MySQLNDがPHPにMySQLと通信させる理由が他にない場合は、あらゆる面で優れたソリューションです。

MySQLNDをインストールできない場合は、ほとんどの場合、このエラーを実際に無視しても問題ありません。それは何よりもFYIの通知です。怖いですね。


2

MySQLネイティブドライバー(mysqlnd)を使用してソースからphpをコンパイルするには、

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

から/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

これらのオプションを使用して、1つ以上のPHPMySQL拡張機能を含めることができます。
これらのオプションに値が渡されない場合、または値がの場合mysqlnd、MySQLネイティブドライバーが使用されます。


あなたの答えは私にとってとても貴重でした。その中で、コンパイルされたドライバーを適切に使用するには、両方--with-mysql--with-mysqliオプションの両方を使用する必要があることを読みました。そのため、今回もconfigureコマンドを次のように実行しました: `--with-mysql = / home / stephane / programs / mariadb / install \ --with-mysqli = / home / stephane / programs / mariadb / install / bin / mysql_config`そして問題は解決されました。正しいMariaDBクライアントバージョンを使用するようになりました。
ステファン

1

私は私のワードプレスサイトで同じphp戦争をしました...

エラー:警告:mysql_connect():ヘッダーとクライアントライブラリのマイナーバージョンの不一致。ヘッダー:50547ライブラリ:50628(/home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php、1515行目)

原因:wp 4.2を4.5バージョンに更新しました(PHPとMySqlの不一致)

1515行目でwp-db.phpを変更しました

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

それは私のワードプレスサイトで間違いを戦うことなく得ました


ので、ちょうどFYI、これはPHP7の下で作業を停止しますmysql_関数が削除されました
Machavity

1

ドメインウェブホスティングのためにcpanelまたはwhmにアクセスした場合...

cPanelで、[ソフトウェアとサービス]タブに移動し、>> [PHPバージョンの選択]をクリックします>>希望のPHPバージョンを設定します...

警告:mysql_connect():ヘッダーとクライアントライブラリのマイナーバージョンの不一致。 ヘッダー:50547ライブラリ:chennaitechnologies.comの50628

例えば。現在のPHPバージョン:

PHPバージョン[5.2](5.2、5.3、5.4、5.5、5.6の利用可能なphpバージョンのリスト)

警告:ネイティブphpバージョンのPHPセレクターを介してphpモジュールとphpオプションを変更することはできません

私は5.6phpバージョンを選択しました、その後、私のワードプレスのブログサイトでエラーがクリアされました...


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

Apacheを再構築するだけで、上記のエラーを解決しました。

cPanel Version  56.0 (build 25)
Apache Version  2.4.18
PHP Version 5.5.30
MySQL Version   10.0.26-MariaDB


0

WHMとcPanelの場合、バージョンによってはmysqliを明示的に設定してビルドする必要があります。

WHMを使用して、CENTOS 6.9 xen pv [dc] v68.0.27で、すべてのオプションを確認してmysqliを選択してApache / PHPを再構築する必要がありました。デフォルトでは、非推奨のmysqlをビルドしていました。これで減価償却メッセージはなくなり、将来のMySQLアップグレードの準備が整いました。


0

私はcentos7で同じ問題に遭遇しました。php-mysqlを削除してphp-mysqlndをインストールすると、問題が修正されました。あなたの提案をしてくれたCarlosBuenosvinosZamoraに感謝します。

ここでの回答のほとんどはDebian / Ubuntuに基づいているため、これが誰にとっても役立つ可能性がある場合に備えて、centos7での私のコマンドを次に示します。

インストールされているphp-mysqlパッケージを見つけるには

yum list installed | grep mysql

インストールされているphp-mysqlパッケージを削除するには

yum remove php55w-mysql.x86_64

php-mysqlndをインストールするには

yum install php-mysqlnd.x86_64

-1

PHPのバージョンを5.6から5.5に変更しました修正しました

コントロールパネル> CGIスクリプトに移動し、そこでPHPバージョンを変更する必要があります。


私たちは皆、バージョンが下がらないように最新バージョンに移行しようとしています。
karmafunk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.