问题描述
在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中,建议通过以下方式修复它:
-
切换到在PHP中使用mysqlnd驱动程序(推荐的解决方案)。
-
以较低的错误报告级别运行:
$err_level = error_reporting(0); $conn = mysql_connect('params'); error_reporting($err_level);
-
用MariaDB客户端库重新编译PHP。
-
将原始的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,则实际上可以安全地大部分忽略此错误。仅供参考,比什么都重要。听起来很吓人。