當前位置: 首頁>>技術教程>>正文


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/zh-tw/article/9800.html,未經允許,請勿轉載。