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

Ian*_*ter 80 php ubuntu mysqli warnings

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

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

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

客户端API库版本=> 5.5.24

客户端API标头版本=> 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.
Run Code Online (Sandbox Code Playgroud)

删除旧版本

$ 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
Run Code Online (Sandbox Code Playgroud)

ken*_*ken 123

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

MariaDB网站,建议修复它

  1. 切换到在PHP中使用mysqlnd驱动程序(推荐的解决方案).
  2. 以较低的错误报告级别运行:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用MariaDB客户端库重新编译PHP.
  4. 将原始MySQL客户端库与MariaDB一起使用.

我在Ubuntu中使用mysqlnd驱动程序修复了我的问题:

sudo apt-get install php5-mysqlnd
Run Code Online (Sandbox Code Playgroud)

干杯!


[更新:额外信息]安装此驱动程序还可以解决将整数值作为字符串返回的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);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是答案,因为这也适用于mysql (4认同)
  • 感谢您提供的技巧,这对我来说非常适合MariaDB (3认同)
  • 与maria db和php7的mysqlnd工作得很好,谢谢你的答案! (2认同)

Car*_*ora 67

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

删除此版本的mysql驱动程序

sudo apt-get remove php5-mysql
Run Code Online (Sandbox Code Playgroud)

而是安装它

sudo apt-get install php5-mysqlnd
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下你的答案.像这些包那样做的事情. (9认同)
  • 对于新的MySQL 5.6系列,你需要安装php5-mysqlnd,而不是php5-mysql. (4认同)
  • 显然需要重新启动Apache才能使其正常工作.只是指出明显的 (3认同)

dAm*_*m2K 30

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


mar*_*rek 23

MySQL也是如此:

sudo apt-get install php5-mysqlnd
Run Code Online (Sandbox Code Playgroud)

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


Mac*_*ity 10

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

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

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


Pum*_*izo 7

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

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