当前位置: 首页>>技术教程>>正文


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

, , ,

问题描述

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

Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50162 Library:50524

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

Client API library version => 5.5.24

Client API header version => 5.1.62

我已经尝试更新php5-mysql和php,但是我已经拥有了两者的最新版本。我该如何更新标题版本,以便不再看到此警告?

编辑

我的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是使用MySQL 5.1编译的,但是现在它链接了5.5.X系列的mysql库。您必须将PHP升级到使用MySQL 5.5编译的版本,或者将mysql客户端库还原为5.1.x。

次佳回答

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

MariaDB site中,建议通过以下方式修复它:

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

第三种回答

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

删除此版本的mysql驱动程序

sudo apt-get remove php5-mysql

并安装它

sudo apt-get install php5-mysqlnd

第四种回答

同样适用于MySQL:

sudo apt-get install php5-mysqlnd

我已经阅读了此线程,试图找到MySQL的解决方案,并且也看到ken的回答,但是我忽略了MariaDB的解决方案,以这种方式浪费了几个小时。对我来说不清楚这是否适用于MySQL。这篇文章只是为了节省您我失去的几个小时。

第五种回答

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

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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9800.html,未经允许,请勿转载。