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

时间:2012-05-25 18:06:21

标签: php ubuntu mysqli warnings

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

  

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

在我的php -i输出中,我在mysqli

下列出了以下值
  

客户端API库版本=> 5.5.24

     

客户端API标头版本=> 62年1月5日

我已经尝试更新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

14 个答案:

答案 0 :(得分:122)

我正在使用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一起使用。
  5. 通过在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);
    

答案 1 :(得分:67)

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

删除此版本的mysql驱动程序

sudo apt-get remove php5-mysql

然后安装

sudo apt-get install php5-mysqlnd

答案 2 :(得分:30)

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

答案 3 :(得分:23)

MySQL也是如此:

sudo apt-get install php5-mysqlnd

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

答案 4 :(得分:10)

此错误的根本原因是PHP前一段时间与MySQL客户端库分离。所以正在发生的事情(主要是在较旧的Linux编译器上)是人们将编译PHP来对抗给定的MySQL客户端版本(意味着安装的MySQL版本无关紧要)而不是升级(在CentOS这个包中)列为mysqlclientXX,其中XX表示包裹编号)。这也允许软件包维护者支持较低版本的MySQL。这是一种混乱的方式,但这是PHP和MySQL使用不同许可的唯一方法。

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

如果你无法安装MySQLND,你实际上可以安全地忽略这个错误。这只是一个FYI通知而不是任何事情。这听起来很可怕。

答案 5 :(得分:2)

使用MySQL native driver (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本机驱动程序。

答案 6 :(得分:1)

我的wordpress网站上有相同的php交战...

  

错误:警告:mysql_connect():标头和客户端库次要版本不匹配。标题:50547图书馆:50628 in /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网站上没有交战错误

答案 7 :(得分:1)

如果你有访问域名网站托管的cpanel或whm ......

在cPanel中,转到“软件和服务”标签,&gt;&gt;然后单击“选择PHP版本”&gt;&gt;设置你想要的PHP版本...

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

EG。 当前的PHP版本:

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

警告:通过PHP Selector更改php模块和php选项以获取本机php版本

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

答案 8 :(得分: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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

将PHP版本从5.6更改为5.5修复了该问题

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

答案 12 :(得分: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

答案 13 :(得分:0)

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

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