标头和客户端库次要版本不匹配


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客户端或其他。
Marc B

@MarcB我应该拥有MySQL套件的所有最新版本(请参阅我的最新编辑)
Ian Hunter

1
无法升级“客户端API标头”版本,因为它已硬编码到PHP可执行文件中。它们是编译PHP时安装在PHP软件包管理器系统上的mysql头文件(和库)。您不能升级它们。您必须故障恢复到MySQL 5.1.X库才能再次使用该版本的PHP,或将PHP升级到使用MySQL 5.5.X编译的版本。
dAm2K,2012年

@ dAm2K由于原来的版本能够通过交换我现在mysqli.so文件用较新的升级。
伊恩·亨特

1
我真的不知道是否有办法检查ABI兼容性...您只需要检查apache error_log中是否有奇怪的httpd子错误。如果3到4天后错误仍然存​​在,那么您就可以了。
dAm2K,2012年

Answers:


31

您的PHP是使用MySQL 5.1编译的,但现在它正在链接5.5.X系列的mysql库。您必须将PHP升级到使用MySQL 5.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. 将原始的MySQL客户端库与MariaDB一起使用。

通过在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

关闭错误报告。那是最好的解决方案。:D
MaXi32

2
与maria db和php7一起使用的mysqlnd效果很好,谢谢您的回答!
里卡多BRGWeb

68

对于新的MySQL 5.6系列,您需要安装php5-mysqlnd而不是php5-mysql。

删除此版本的mysql驱动程序

sudo apt-get remove php5-mysql

并安装它

sudo apt-get install php5-mysqlnd

9
请解释一下您的答案。像这些软件包所做的事情。
Machavity

4
对于新的MySQL 5.6系列,您需要安装php5-mysqlnd而不是php5-mysql。
2014年

它解决了问题。当我将MySql(AWS RDS MySql实例)从5.5升级到5.6时遇到了这个问题。
Rahul Prasad 2014年

3
显然,需要重新启动Apache才能正常工作。只是指出显而易见的事实
Metafaniel,2015年

1
这打破了我的phpMyAdmin。似乎phpMyAdmin无法与MySQL本机驱动程序一起使用。
伊桑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

10

导致此错误的根本原因是,PHP在一段时间前已与MySQL客户端库分离。因此,发生的事情(主要是在较早的linux编译器上)是,人们将根据给定的MySQL客户端版本编译PHP (这意味着所安装的MySQL版本无关),而不是进行升级(在CentOS中,此软件包列为mysqlclientXX,其中XX代表包裹号)。这也使软件包维护者可以支持较低版本的MySQL。这是一种麻烦的方式,但是鉴于PHP和MySQL如何使用不同的许可,这是唯一的方式。

MySQLND通过使用PHP自己的本机驱动程序(ND)来解决此问题,该驱动程序不再依赖MySQL客户端。它还针对您使用的PHP版本进行了编译。如果没有其他原因使MySQLND使PHP与MySQL通讯,那么这是一个更好的解决方案。

如果您无法安装MySQLND,则实际上可以安全地大部分忽略此错误。仅供参考,比什么都重要。听起来很吓人。


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

使用这些选项可以包括一个或多个PHP MySQL扩展。
如果没有将值传递给这些选项,或者如果值为mysqlnd,则将使用MySQL本机驱动程序。


您的回答对我来说是如此宝贵。在其中,我读到我必须同时使用BOTH--with-mysql--with-mysqli选项才能正确使用已编译的驱动程序。因此,这次我再次使用以下命令配置命令:`--with-mysql = / home / stephane / programs / mariadb / install \ --with-mysqli = / home / stephane / programs / mariadb / install / bin / mysql_config`问题就解决了 现在,它使用正确的MariaDB客户端版本。
Stephane

1

我在wordpress网站上遇到了同样的php waring ...

错误:警告:mysql_connect():标头和客户端库次要版本不匹配。标头:50547,第1515行/home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php中的库:50628

原因:我将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 );
}

它在我的wordpress网站上没有犯错


仅供参考,由于mysql_函数已被删除
Machavity

1

如果您可以访问cpanel或whm进行域名虚拟主机托管...

在cPanel中,转到“软件和服务”选项卡>>,然后单击“选择PHP版本” >>设置所需的php版本。

警告:mysql_connect():标头和客户端库次要版本不匹配。 标头:50547图书馆:50628 in chennaitechnologies.com

例如。当前的PHP版本:

PHP版本[5.2](列表5.2、5.3、5.4、5.5、5.6可用的php版本)

警告:无法通过PHP Selector为本地php版本更改php模块和php选项

在我的wordpress博客网站上清除了该错误之后,我选择了5.6 php版本...


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才能构建。

在CENTOS 6.9 xen pv [dc] v68.0.27下,使用WHM,需要通过查看所有选项并选择要构建的mysqli来重建Apache / PHP。默认是构建不推荐使用的mysql。现在折旧消息消失了,一条消息准备好用于将来的MySQL升级。


0

我在centos7上遇到了同样的问题。删除php-mysql和安装php-mysqlnd可以解决此问题。感谢Carlos Buenosvinos Zamora的建议。

这是我在centos7上的命令,以防万一这对任何人都有帮助,因为此处的大多数答案都基于Debian / Ubuntu。

查找已安装的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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.