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

Headers and client library minor version mismatch

提问人:Ian Hunter 提问时间:5/26/2012 最后编辑:Ian Hunter 更新时间:8/14/2022 访问量:241646

问:

在 PHP 中,每当我尝试连接到数据库时,我都会收到以下警告(通过mysql_connect)

警告:mysql_connect():标头和客户端库次要版本不匹配。标题:50162 库:50524

在我的输出中,我在mysqli下列出了以下值php -i

客户端 API 库版本 => 5.5.24

客户端 API 标头版本 => 5.1.62

我尝试更新php5-mysqlphp,但我已经是它们两个的最新版本。如何更新标头版本,以便不再看到此警告?

编辑

My 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
php ubuntu mysqli 警告

评论

0赞 Marc B 5/26/2012
您还必须更新 MySQL 内容。mysql-client 或其他什么。
0赞 Ian Hunter 5/26/2012
@MarcB 我应该拥有MySQL套件的所有最新版本(请参阅我的最新编辑)
1赞 dAm2K 5/27/2012
“客户端 API 标头”版本无法升级,因为它已硬编码到 PHP 可执行文件中。它们是编译PHP时安装在PHP软件包mantainer系统上的mysql头文件(和库)。您无法升级它们。您必须故障回复到 MySQL 5.1.X 库才能使该版本的 PHP 再次工作,或者将 PHP 升级到使用 MySQL 5.5.X 编译的版本。
0赞 Ian Hunter 5/27/2012
@dAm2K 事实证明,通过将我当前的 mysqli.so 文件换成较新的文件,可以升级该版本。
1赞 dAm2K 5/27/2012
我真的不知道有没有办法检查ABI兼容性......您只需要检查 Apache error_log 是否有奇怪的 httpd 子错误。如果 3-4 天后错误没有出现,您应该没问题。

答:

32赞 dAm2K 5/27/2012 #1

您的 PHP 是使用 MySQL 5.1 编译的,但现在它正在链接 5.5.X 系列的 mysql 库。 您必须将 PHP 升级到使用 MySQL 5.5 编译的版本或将 mysql 客户端库恢复到 5.1.x。

评论

1赞 Ian Hunter 5/27/2012
基本上这就是我遇到的问题,但是我没有升级或降级任何东西,而是能够从使用 MySQL 5.5 编译的 PHP 的服务器中提取 mysqli.so 文件,并将其粘贴在我的 /usr/lib/php5/ 目录中。然而,我不确定这是最安全的路线,所以我不想把它作为首选答案。感谢您的帮助。
132赞 ken 3/17/2014 #2

我正在使用 MariaDB 并遇到类似的问题。

MariaDB站点,建议通过以下方式修复它

  1. 切换到在 PHP 中使用 mysqlnd 驱动程序(推荐解决方案)。
  2. 使用 MariaDB 客户端库重新编译 PHP。
  3. 将原始 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);

评论

0赞 Arunas Bart 6/30/2020
php5-mysqlnd驱动程序有效,但答案应注意,需要重新启动apache2ctl
23赞 marek 4/24/2014 #3

这同样适用于MySQL:

sudo apt-get install php5-mysqlnd

我已经阅读了这个线程,试图找到 MySQL 的解决方案,我也看到了 ken 的答案,但我忽略了 MariaDB 的解决方案,浪费了几个小时。我不清楚这同样适用于MySQL。这篇文章只是为了让你节省我失去的几个小时。

评论

0赞 Paul 7/27/2016
对我来说很好的修复,然后是 sudo systemctl restart mysql sudo systemctl restart apache2
0赞 Rui F Ribeiro 6/8/2017
最好进行安装并让依赖项删除php5-mysql。有些系统不喜欢在没有替代方案的情况下清除php5-mysql。
70赞 Carlos Buenosvinos Zamora 8/11/2014 #4

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

删除此版本的 mysql 驱动程序

sudo apt-get remove php5-mysql

并安装它

sudo apt-get install php5-mysqlnd

评论

9赞 Machavity 8/12/2014
请解释一下你的答案。比如这些包的作用。
4赞 Carlos Buenosvinos Zamora 8/16/2014
对于新的 MySQL 5.6 系列,您需要安装 php5-mysqlnd,而不是 php5-mysql。
0赞 Rahul Prasad 12/14/2014
它解决了这个问题。当我将 MySql(AWS RDS MySql 实例)从 5.5 升级到 5.6 时,我遇到了这个问题。
3赞 Metafaniel 5/21/2015
显然,需要重新启动Apache才能正常工作。只是指出显而易见的
1赞 Dr. Ehsan Ali 8/8/2015
这打破了我的phpMyAdmin。似乎phpMyAdmin无法与MySQL本机驱动程序一起使用。
2赞 Sithsu 8/26/2014 #5

要使用 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 扩展。
如果未将值传递给这些选项,或者如果该值为 ,则将使用 MySQL 本机驱动程序。
mysqlnd

评论

0赞 Stephane 11/11/2016
你的回答对我来说太有价值了。在其中,我读到我必须使用 BOTH 和 options 才能正确使用编译的驱动程序。所以这次我再次执行了我的配置命令:' --with-mysql=/home/stephane/programs/mariadb/install \ --with-mysqli=/home/stephane/programs/mariadb/install/bin/mysql_config ',问题解决了。它现在使用正确的 MariaDB 客户端版本。--with-mysql--with-mysqli
12赞 Machavity 5/21/2015 #6

此错误的根本原因是PHP前段时间将自己与MySQL客户端库分离。因此,正在发生的事情(主要是在较旧的 linux 编译上)是,人们会针对给定的 MySQL 客户端版本(意味着安装的 MySQL 版本无关紧要)编译 PHP,而不是升级(在 CentOS 中,这个包被列为 ,其中代表包号)。这也允许包维护者支持较低版本的 MySQL。这是一种混乱的方法,但考虑到PHP和MySQL如何使用不同的许可,这是唯一的方法。mysqlclientXXXX

MySQLND通过使用PHP自己的原生驱动程序(ND)解决了这个问题,该驱动程序不再依赖于MySQL客户端。它也是针对您正在使用的 PHP 版本编译的。这是一个更好的解决方案,如果没有其他原因,MySQLND是为了让PHP与MySQL对话。

如果您无法安装 MySQLND,您实际上可以在大多数情况下安全地忽略此错误。这更像是一个仅供参考的通知。这听起来很可怕。

1赞 OpenWebWar 4/13/2016 #7

我在我的 wordpress 网站上得到了同样的 php 交战......

错误:警告:mysql_connect():标头和客户端库次要版本不匹配。标题:50547 库:50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 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 );
}

它在我的 wordpress 网站上没有交战错误

评论

0赞 Machavity 4/19/2016
仅供参考,这将在 PHP7 下停止工作,因为mysql_功能已被删除
1赞 OpenWebWar 4/19/2016 #8

如果您有权访问 cPanel 或 WHM 进行域虚拟托管......

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

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

例如。 当前PHP版本:

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

警告:无法通过PHP选择器更改本机php版本的php模块和php选项

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

1赞 Dot Online Services 7/17/2016 #9
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赞 Bob P 1/26/2018 #10

对于 WHM 和 cPanel,某些版本需要显式设置 mysqli 来构建。

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

-3赞 TheTechGuy 10/11/2018 #11

将 PHP 版本从 5.6 更改为 5.5 修复了它

您必须转到控制面板>CGI脚本并在那里更改PHP版本。

评论

0赞 karmafunk 10/23/2019
我们都在尝试使用最新版本,而不是在版本中返回。
0赞 Agent 7 12/9/2019 #12

我在 centos7 上遇到了同样的问题。删除 php-mysql 并安装 php-mysqlnd 解决了该问题。感谢卡洛斯·布宜诺斯维诺斯·萨莫拉的建议。

以下是我在 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
7赞 Pumizo 12/23/2020 #13

我的托管公司告诉我通过停用“mysqli”并在 php 扩展中激活“nd_mysqli”来解决这个问题。

错误消失了,但我没有知识来了解这是否是解决此问题的正确方法。

评论

1赞 Umut OVECOGLU 1/6/2023
最短的解决方案,无需进行任何代码更改!对我有用。
0赞 JamesYen Yen 9/3/2021 #14

适用于 MariaDB 10.6.4-MariaDB,php56w,centos 7.7

  1. yum remove php56w-mysqli
  2. yum install php56w-mysqlnd