提问人:Ian Hunter 提问时间:5/26/2012 最后编辑:Ian Hunter 更新时间:8/14/2022 访问量:241646
标头和客户端库次要版本不匹配
Headers and client library minor version mismatch
问:
在 PHP 中,每当我尝试连接到数据库时,我都会收到以下警告(通过mysql_connect
)
警告:mysql_connect():标头和客户端库次要版本不匹配。标题:50162 库:50524
在我的输出中,我在mysqli下列出了以下值php -i
客户端 API 库版本 => 5.5.24
客户端 API 标头版本 => 5.1.62
我尝试更新php5-mysql和php,但我已经是它们两个的最新版本。如何更新标头版本,以便不再看到此警告?
编辑
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 是使用 MySQL 5.1 编译的,但现在它正在链接 5.5.X 系列的 mysql 库。 您必须将 PHP 升级到使用 MySQL 5.5 编译的版本或将 mysql 客户端库恢复到 5.1.x。
评论
我正在使用 MariaDB 并遇到类似的问题。
从MariaDB站点,建议通过以下方式修复它
- 切换到在 PHP 中使用 mysqlnd 驱动程序(推荐解决方案)。
- 使用 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:
sudo apt-get install php5-mysqlnd
我已经阅读了这个线程,试图找到 MySQL 的解决方案,我也看到了 ken 的答案,但我忽略了 MariaDB 的解决方案,浪费了几个小时。我不清楚这同样适用于MySQL。这篇文章只是为了让你节省我失去的几个小时。
评论
对于新的 MySQL 5.6 系列,您需要安装 php5-mysqlnd,而不是 php5-mysql。
删除此版本的 mysql 驱动程序
sudo apt-get remove php5-mysql
并安装它
sudo apt-get install php5-mysqlnd
评论
要使用 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
评论
--with-mysql
--with-mysqli
此错误的根本原因是PHP前段时间将自己与MySQL客户端库分离。因此,正在发生的事情(主要是在较旧的 linux 编译上)是,人们会针对给定的 MySQL 客户端版本(意味着安装的 MySQL 版本无关紧要)编译 PHP,而不是升级(在 CentOS 中,这个包被列为 ,其中代表包号)。这也允许包维护者支持较低版本的 MySQL。这是一种混乱的方法,但考虑到PHP和MySQL如何使用不同的许可,这是唯一的方法。mysqlclientXX
XX
MySQLND通过使用PHP自己的原生驱动程序(ND)解决了这个问题,该驱动程序不再依赖于MySQL客户端。它也是针对您正在使用的 PHP 版本编译的。这是一个更好的解决方案,如果没有其他原因,MySQLND是为了让PHP与MySQL对话。
如果您无法安装 MySQLND,您实际上可以在大多数情况下安全地忽略此错误。这更像是一个仅供参考的通知。这听起来很可怕。
我在我的 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 网站上没有交战错误
评论
如果您有权访问 cPanel 或 WHM 进行域虚拟托管......
在cPanel中,转到“软件和服务”选项卡,>>然后单击“选择PHP版本”>>设置所需的php版本...
例如。 当前PHP版本:
PHP 版本 [5.2] ( 5.2, 5.3, 5.4, 5.5, 5.6 可用的 php 版本列表)
警告:无法通过PHP选择器更改本机php版本的php模块和php选项
我选择了 5.6 php 版本,之后在我的 wordpress 博客网站上清除了该错误......
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
对于 WHM 和 cPanel,某些版本需要显式设置 mysqli 来构建。
使用 WHM,在 CENTOS 6.9 xen pv [dc] v68.0.27 下,需要通过查看所有选项并选择 mysqli 来重建 Apache/PHP。默认设置是构建已弃用的 mysql。现在折旧消息已经消失,一个已准备好用于将来的MySQL升级。
将 PHP 版本从 5.6 更改为 5.5 修复了它。
您必须转到控制面板>CGI脚本并在那里更改PHP版本。
评论
我在 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
我的托管公司告诉我通过停用“mysqli”并在 php 扩展中激活“nd_mysqli”来解决这个问题。
错误消失了,但我没有知识来了解这是否是解决此问题的正确方法。
评论
适用于 MariaDB 10.6.4-MariaDB,php56w,在 centos 7.7 上
yum remove php56w-mysqli
yum install php56w-mysqlnd
评论