87

在 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
4

15 回答 15

128

我正在使用 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);
于 2014-03-17T12:16:49.570 回答
69

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

删除这个版本的mysql驱动

sudo apt-get remove php5-mysql

并安装它

sudo apt-get install php5-mysqlnd
于 2014-08-11T15:51:07.553 回答
31

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

于 2012-05-26T18:29:27.393 回答
23

同样适用于 MySQL:

sudo apt-get install php5-mysqlnd

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

于 2014-04-24T14:40:37.770 回答
11

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

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

如果您无法安装 MySQLND,您实际上可以在大多数情况下安全地忽略此错误。这只是一个仅供参考的通知,而不是任何东西。只是听起来很吓人。

于 2015-05-21T02:08:43.973 回答
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 本机驱动程序。

于 2014-08-26T12:26:59.113 回答
1

我在我的 wordpress 网站中遇到了相同的 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 );
}

它在我的 wordpress 网站上没有任何错误

于 2016-04-12T20:27:31.983 回答
1

如果您可以访问 cpanel 或 whm 进行域网络托管...

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

警告:mysql_connect():标头和客户端库次要版本不匹配。 标题:50547 库:50628 在 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 博客网站上清除了该错误之后......

于 2016-04-18T21:02:32.483 回答
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
于 2016-07-16T21:31:11.650 回答
0

我在使用 Percona/MySQL 5.6 时遇到了这个问题,并且 php 驱动程序是用 5.5 编译的,并且某些应用程序需要 php5-mysql,所以我编写了一个脚本来重建驱动程序。

https://github.com/falcacibar/php5-mysql-rebuild

于 2015-01-07T15:19:56.287 回答
0

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

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

于 2018-01-25T21:34:47.247 回答
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
于 2019-12-08T16:52:57.697 回答
0

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

错误消失了,但我不知道这是否是解决此问题的正确方法。

于 2020-12-23T10:31:52.997 回答
0

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

  1. yum remove php56w-mysqli
  2. yum install php56w-mysqlnd
于 2021-09-03T04:25:39.883 回答
-1

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

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

于 2018-10-11T06:47:40.287 回答