Tiêu đề và phiên bản nhỏ của thư viện ứng dụng khách không khớp


81

Trong PHP, tôi nhận được cảnh báo sau bất cứ khi nào tôi cố gắng kết nối với cơ sở dữ liệu (qua mysql_connect)

Cảnh báo: mysql_connect (): Tiêu đề và phiên bản nhỏ của thư viện ứng dụng khách không khớp. Tiêu đề: 50162 Thư viện: 50524

Trong php -iđầu ra của tôi, tôi có các giá trị sau được liệt kê trong mysqli

Phiên bản thư viện API ứng dụng khách => 5.5.24

Phiên bản tiêu đề API ứng dụng khách => 5.1.62

Tôi đã thử cập nhật php5-mysql php nhưng tôi đã ở phiên bản mới nhất của cả hai. Làm cách nào để cập nhật phiên bản tiêu đề để tôi không thấy cảnh báo này?

BIÊN TẬP

Tất cả các tệp MySQL của tôi phải được cập nhật thành phiên bản mới nhất:

$ 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.

Xóa phiên bản cũ

$ 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

bạn cũng sẽ phải cập nhật nội dung mysql. mysql-client hoặc bất cứ thứ gì.
Marc B

@MarcB Tôi nên có tất cả các phiên bản mới nhất của bộ MySQL (xem chỉnh sửa mới nhất của tôi)
Ian Hunter

1
Không thể nâng cấp phiên bản "Tiêu đề API ứng dụng khách" vì phiên bản này được mã hóa cứng thành tệp thực thi PHP. Chúng là các tiêu đề mysql (và các thư viện) được cài đặt trên hệ thống của trình xử lý gói PHP tại thời điểm PHP được biên dịch. Bạn không thể nâng cấp chúng. Bạn phải quay lại thư viện MySQL 5.1.X để làm cho phiên bản PHP đó hoạt động trở lại hoặc nâng cấp PHP lên phiên bản được biên dịch với MySQL 5.5.X.
dAm2K

@ dAm2K Khi nó bật ra phiên bản có thể được nâng cấp bằng cách trao đổi tập tin mysqli.so hiện tại của tôi với một phiên bản mới hơn.
Ian Hunter

1
Tôi thực sự không biết có cách nào để kiểm tra khả năng tương thích của ABI không ... bạn chỉ cần kiểm tra apache error_log cho các lỗi con httpd lạ. Nếu sau 3-4 ngày mà lỗi không đến, bạn sẽ không sao.
dAm2K

Câu trả lời:


31

PHP của bạn đã được biên dịch với MySQL 5.1 nhưng bây giờ nó đang liên kết một thư viện mysql của họ 5.5.X. Bạn phải nâng cấp PHP lên phiên bản được biên dịch với MySQL 5.5 hoặc hoàn nguyên các thư viện máy khách mysql về 5.1.x.


1
Về cơ bản đây là vấn đề tôi đang gặp phải, nhưng thay vì nâng cấp hoặc hạ cấp bất kỳ thứ gì, tôi có thể kéo tệp mysqli.so từ một máy chủ có PHP được biên dịch với MySQL 5.5 và chỉ cần gắn nó vào thư mục / usr / lib / php5 / của tôi . Tuy nhiên, tôi không chắc đó là con đường an toàn nhất để đi, vì vậy tôi không muốn sử dụng nó làm câu trả lời. Cảm ơn bạn đã giúp đỡ.
Ian Hunter

126

Tôi đang sử dụng MariaDB và gặp sự cố tương tự.

Từ trang web MariaDB , bạn nên sửa nó bằng cách

  1. Chuyển sang sử dụng trình điều khiển mysqlnd trong PHP (Giải pháp được đề xuất).
  2. Chạy với mức báo cáo lỗi thấp hơn:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Biên dịch lại PHP với các thư viện khách MariaDB.
  4. Sử dụng thư viện máy khách MySQL gốc của bạn với MariaDB.

Sự cố của tôi đã được khắc phục bằng cách sử dụng trình điều khiển mysqlnd trong Ubuntu:

sudo apt-get install php5-mysqlnd

Chúc mừng!


[update: extra information] Cài đặt trình điều khiển này cũng giải quyết sự cố PDO trả về giá trị số nguyên dưới dạng một chuỗi. Để giữ kiểu là số nguyên, sau khi cài đặt mysqlInd, hãy làm điều này

$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);

4
Điều này sẽ là câu trả lời, vì điều này làm việc với mysql quá
Justin E

1
Điều này đã giải quyết vấn đề của tôi với sự không khớp mysql và php trong Ubuntu. Cảm ơn!
jamescampbell

1
cảm ơn điều này làm việc cho mysql cluster 7.30. Tôi rất hài lòng với nó: D
haidarvm

tắt báo cáo lỗi. đó là giải pháp tốt nhất. : D
MaXi32

2
mysqlnd với maria db và php7 hoạt động tốt, cảm ơn vì câu trả lời!
Ricardo BRGWeb

68

Đối với họ MySQL 5.6 mới, bạn cần cài đặt php5-mysqlnd, không phải php5-mysql.

Xóa phiên bản trình điều khiển mysql này

sudo apt-get remove php5-mysql

Và cài đặt cái này thay thế

sudo apt-get install php5-mysqlnd

9
Vui lòng giải thích câu trả lời của bạn một số. Những thứ như những gì các gói này làm.
Machavity

4
Đối với họ MySQL 5.6 mới, bạn cần cài đặt php5-mysqlnd, không phải php5-mysql.
Carlos Buenosvinos Zamora

Nó đã giải quyết được vấn đề. Tôi đã gặp phải sự cố này khi nâng cấp MySql (AWS RDS MySql Instance) từ 5.5 lên 5.6.
Rahul Prasad

3
Rõ ràng là cần khởi động lại Apache để việc này hoạt động bình thường. Chỉ trỏ điều hiển nhiên
Metafaniel

1
Điều này đã phá vỡ phpMyAdmin của tôi. Có vẻ như phpMyAdmin không thể hoạt động với trình điều khiển gốc MySQL.
Ehsan

23

Tương tự hoạt động cho MySQL:

sudo apt-get install php5-mysqlnd

Tôi đã đọc chủ đề này đang cố gắng tìm giải pháp cho MySQL và tôi cũng đã thấy câu trả lời của ken, nhưng tôi đã bỏ qua giải pháp cho MariaDB, lãng phí vài giờ theo cách đó. Tôi không rõ rằng điều tương tự có thể áp dụng cho MySQL. Bài đăng này chỉ là để dành cho bạn vài giờ tôi đã mất.


sửa chữa tốt cho tôi, tiếp theo là sudo systemctl khởi động lại mysql sudo systemctl restart apache2
Paul

Tốt hơn là thực hiện cài đặt và để các phần phụ thuộc xóa php5-mysql. Một số hệ thống không thích việc thanh lọc php5-mysql mà không có giải pháp thay thế.
Rui F Ribeiro

10

Nguyên nhân gốc rễ của lỗi này là do PHP đã tự tách rời khỏi các thư viện MySQL Client một thời gian trước. Vì vậy, những gì đang xảy ra (chủ yếu trên các biên dịch cũ hơn của linux) là mọi người sẽ biên dịch PHP dựa trên một bản dựng nhất định của MySQL Client (có nghĩa là phiên bản MySQL được cài đặt là không liên quan) và không nâng cấp (trong CentOS gói này được liệt kê là mysqlclientXX, nơi XXđại diện cho số gói). Điều này cũng cho phép người bảo trì gói hỗ trợ các phiên bản MySQL thấp hơn. Đó là một cách làm lộn xộn, nhưng đó là cách duy nhất cho cách PHP và MySQL sử dụng cấp phép khác nhau.

MySQLND giải quyết vấn đề bằng cách sử dụng trình điều khiển gốc của PHP (ND), trình điều khiển này không còn phụ thuộc vào MySQL Client. Nó cũng được biên dịch cho phiên bản PHP bạn đang sử dụng. Đây là một giải pháp tốt hơn, nếu không vì lý do gì khác mà MySQLND được tạo ra để PHP nói chuyện với MySQL.

Nếu bạn không thể cài đặt MySQLND, bạn thực sự có thể bỏ qua lỗi này một cách an toàn. Nó chỉ là một thông báo FYI hơn bất cứ thứ gì. Nó chỉ nghe có vẻ đáng sợ.


2

Để biên dịch php từ nguồn với trình điều khiển gốc MySQL (mysqlnd) ,

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

Từ /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

Một hoặc nhiều phần mở rộng PHP MySQL có thể được đưa vào bằng cách sử dụng các tùy chọn này.
Nếu một giá trị không được chuyển cho các tùy chọn này hoặc nếu có giá trị mysqlnd, thì trình điều khiển gốc MySQL sẽ được sử dụng.


Câu trả lời của bạn rất có giá trị đối với tôi. Trong đó, tôi đọc rằng tôi phải sử dụng CẢ HAI --with-mysql--with-mysqlicác tùy chọn để sử dụng đúng trình điều khiển đã biên dịch. Vì vậy, tôi đã thực hiện lại lệnh cấu hình lần này với: `` --with-mysql = / home / stephane / Programs / mariadb / install \ --with-mysqli = / home / stephane / Programs / mariadb / install / bin / mysql_config ' và vấn đề đã được giải quyết. Bây giờ nó sử dụng đúng phiên bản máy khách MariaDB.
Stephane

1

Tôi có cùng một cuộc chiến php trong trang web wordpress của tôi ...

Lỗi: Cảnh báo: mysql_connect (): Tiêu đề và phiên bản nhỏ của thư viện ứng dụng khách không khớp. Tiêu đề: 50547 Thư viện: 50628 trong /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php trên dòng 1515

Nguyên nhân: Tôi đã cập nhật phiên bản wp 4.2 lên 4.5 (PHP và MySql không khớp)

Tôi đã thay đổi wp-db.php trên dòng 1515

$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );

đến

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 );
}

Nó không có lỗi chiến tranh trên trang web wordpress của tôi


Chỉ là FYI, điều này sẽ ngừng hoạt động trong PHP7 vì các hàm mysql_ đã bị xóa
Machavity

1

Nếu bạn có quyền truy cập cpanel hoặc whm cho tên miền lưu trữ web ...

Trong cPanel, đi tới tab "Phần mềm và dịch vụ", >> và sau đó nhấp vào "Chọn Phiên bản PHP" >> đặt phiên bản php mong muốn của bạn ...

Cảnh báo: mysql_connect (): Tiêu đề và phiên bản nhỏ của thư viện ứng dụng khách không khớp.  Tiêu đề: 50547 Thư viện: 50628 trong chennaitechnologies.com

Ví dụ. Phiên bản PHP hiện tại:

Phiên bản PHP [5.2] (danh sách các phiên bản php 5.2, 5.3, 5.4, 5.5, 5.6 có sẵn)

Cảnh báo: Không thể thay đổi các mô-đun php và các tùy chọn php thông qua Bộ chọn PHP cho phiên bản php gốc

Tôi đã chọn phiên bản php 5.6, sau khi lỗi đó được xóa trên trang blog wordpress của tôi ...


1
Warning: mysqli::mysqli(): Headers and client library minor version mismatch.
Headers:50547 Library:100026

Tôi đã giải quyết lỗi trên bằng cách xây dựng lại Apache của mình:

cPanel Version  56.0 (build 25)
Apache Version  2.4.18
PHP Version 5.5.30
MySQL Version   10.0.26-MariaDB


0

Đối với WHM và cPanel, một số phiên bản cần đặt mysqli đủ điều kiện để xây dựng.

Sử dụng WHM, trong CENTOS 6.9 xen pv [dc] v68.0.27, cần phải xây dựng lại Apache / PHP bằng cách xem xét tất cả các tùy chọn và chọn mysqli để xây dựng. Mặc định là xây dựng mysql không dùng nữa. Bây giờ các thông báo khấu hao đã biến mất và một thông báo đã sẵn sàng để nâng cấp MySQL trong tương lai.


0

Tôi đã gặp vấn đề tương tự trên centos7. Xóa php-mysql và cài đặt php-mysqlnd đã khắc phục sự cố. Cảm ơn Carlos Buenosvinos Zamora về đề xuất của bạn.

Đây là các lệnh của tôi trên centos7 đề phòng trường hợp này có thể giúp ích cho bất kỳ ai vì hầu hết các câu trả lời ở đây đều dựa trên Debian / Ubuntu.

Để tìm gói php-mysql đã cài đặt

yum list installed | grep mysql

Để xóa gói php-mysql đã cài đặt

yum remove php55w-mysql.x86_64

Để cài đặt php-mysqlnd

yum install php-mysqlnd.x86_64

-1

Thay đổi phiên bản PHP từ 5.6 thành 5.5 Đã sửa nó .

Bạn phải truy cập bảng điều khiển> CGI Script và thay đổi phiên bản PHP ở đó.


Tất cả chúng tôi đang cố gắng lên phiên bản mới nhất để không bị lỗi trong các phiên bản.
karmafunk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.