Невідповідність незначної версії заголовків та бібліотеки клієнта


83

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

Видалення старих версій

$ 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

Вам також доведеться оновити матеріали mysql. клієнт mysql або що завгодно.
Marc B

@MarcB У мене повинні бути всі найновіші версії набору MySQL (див. Мою останню редакцію)
Ian Hunter

1
Версію "Client API header" не можна оновити, оскільки вона жорстко закодована у виконуваний файл PHP. Вони були заголовками mysql (і бібліотеками), встановленими в системі управління пакетом PHP на момент компіляції PHP. Ви не можете їх оновити. Вам доведеться повернутися до бібліотек MySQL 5.1.X, щоб ця версія PHP знову працювала, або оновити PHP до версії, скомпільованої з MySQL 5.5.X.
dAm2K

@ DAm2K Як виявилися версія була в стані бути модернізовано шляхом заміни мого поточного файлу mysqli.so з новим.
Ян Хантер,

1
Я справді не знаю, чи є спосіб перевірити сумісність ABI ... вам просто потрібно перевірити apache error_log на наявність дивних помилок дочірнього httpd. Якщо через 3-4 дні помилка не з'явиться, ви повинні бути в порядку.
dAm2K

Відповіді:


31

Ваш PHP був скомпільований з MySQL 5.1, але зараз він пов'язує бібліотеку mysql із сімейства 5.5.X. Вам потрібно оновити PHP до версії, скомпільованої з MySQL 5.5, або повернути бібліотеки клієнта mysql до 5.1.x.


1
В основному це була моя проблема, але замість того, щоб щось модернізувати або знизити, я зміг витягнути файл mysqli.so з сервера з PHP, скомпільованим з MySQL 5.5, і просто вставити його в каталог / usr / lib / php5 / . Однак я не впевнений, що це найбезпечніший шлях, тому я не хочу використовувати це як відповідь. Спасибі за вашу допомогу.
Ян Хантер,

128

Я використовую MariaDB і маю подібну проблему.

На сайті MariaDB рекомендується виправити це шляхом

  1. Перейдіть на використання драйвера mysqlnd у PHP (рекомендоване рішення).
  2. Запустіть із нижчим рівнем звітування про помилки:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Перекомпілюйте PHP з клієнтськими бібліотеками MariaDB.
  4. Використовуйте оригінальну клієнтську бібліотеку MySQL з MariaDB.

Моя проблема виправлена ​​за допомогою драйвера mysqlnd в Ubuntu:

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

4
Це має бути відповіддю, оскільки це працює і з mysql
Джастін Е

1
Це вирішило мою проблему з невідповідністю mysql та php в Ubuntu. Дякую!
jamescampbell

1
дякую, це працює для кластера mysql 7.30. Я дуже задоволений цим: D
haidarvm

вимкнення повідомлення про помилки. це найкраще рішення. : D
MaXi32

2
mysqlnd з maria db і php7 чудово працює, дякую за відповідь!
Рікардо BRGWeb,

69

Для нового сімейства MySQL 5.6 вам потрібно встановити php5-mysqlnd, а не php5-mysql.

Видаліть цю версію драйвера mysql

sudo apt-get remove php5-mysql

І встановіть це замість цього

sudo apt-get install php5-mysqlnd

9
Будь ласка, поясніть свою відповідь. Такі речі, як ці пакунки.
Machavity

4
Для нового сімейства MySQL 5.6 вам потрібно встановити php5-mysqlnd, а не php5-mysql.
Carlos Buenosvinos Zamora

Це вирішило проблему. Я зіткнувся з цією проблемою, коли оновив MySql (екземпляр AWS RDS MySql) з 5,5 до 5,6.
Рахул Прасад

3
Очевидно, що для нормальної роботи потрібен перезапуск Apache. Просто
вказую

1
Це зламало мій phpMyAdmin. Itseems phpMyAdmin не може працювати з власним драйвером MySQL.
Ehsan

23

Те саме працює для MySQL:

sudo apt-get install php5-mysqlnd

Я прочитав цю тему, намагаючись знайти рішення для MySQL, і я також бачив відповідь ken, але я проігнорував рішення для MariaDB, витративши таким чином кілька годин. Для мене було незрозуміло, що те саме може стосуватися MySQL. Цей пост лише для того, щоб пощадити вас тих кількох годин, які я втратив.


хороше виправлення для мене, за яким слідує sudo systemctl restart mysql sudo systemctl restart apache2
Paul,

Набагато краще зробити установку і дозволити залежностям видалити php5-mysql. Деякі системи не люблять очищення php5-mysql без альтернативи.
Rui F Ribeiro

11

Основною причиною цієї помилки є те, що PHP відокремився від бібліотек клієнта MySQL деякий час тому. Отже, те, що відбувається (в основному на старих компіляціях Linux), полягає в тому, що люди компілюватимуть PHP для заданої збірки клієнта MySQL (тобто версія встановленого MySQL не має значення), а не оновлення (у CentOS цей пакет вказаний як mysqlclientXX, де XXпредставляє номер пакета). Це також дозволяє службі підтримки пакетів підтримувати нижчі версії MySQL. Це брудний спосіб зробити це, але це був єдиний спосіб, враховуючи, як PHP та MySQL використовують різні ліцензування.

MySQLND вирішує проблему, використовуючи власний власний драйвер PHP (ND), який більше не покладається на клієнт MySQL. Він також складений для версії PHP, яку ви використовуєте. Це краще рішення навколо, якщо з жодної іншої причини MySQLND створений для того, щоб PHP спілкувався з MySQL.

Якщо ви не можете встановити MySQLND, ви можете здебільшого безпечно ігнорувати цю помилку. Це просто більше повідомлення про дозвіл, ніж будь-що інше. Це просто звучить страшно.


2

Щоб скомпілювати php з джерела з власним драйвером 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

Від /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.


Ваша відповідь була для мене такою цінною. У ньому я прочитав, що мені довелося використовувати ОБИНЕ --with-mysqlта --with-mysqliпараметри, щоб правильно використовувати складений драйвер. Тому я знову зробив свою команду configure цього разу: `--with-mysql = / home / stephane / programs / mariadb / install \ --with-mysqli = / home / stephane / programs / mariadb / install / bin / mysql_config` і питання було вирішено. Тепер він використовує правильну версію клієнта MariaDB.
Стефан

1

Я отримав таку саму php-війну на своєму сайті Wordpress ...

Помилка: Попередження: mysql_connect (): Невідповідність заголовків та незначної версії бібліотеки клієнта. Заголовки: 50547 Бібліотека: 50628 у /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php на рядку 1515

Причина: я оновив версію wp 4.2 до 4.5 (невідповідність PHP та MySql)

Я змінив wp-db.php на рядку 1515

$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 це потрапило без помилок


Просто FYI, це перестане працювати під PHP7, оскільки функції mysql_ були видалені
Machavity

1

Якби у вас був доступ до cpanel або whm для веб-хостингу доменів ...

У cPanel перейдіть на вкладку "Програмне забезпечення та послуги", а потім натисніть "Вибрати версію PHP" >> встановіть потрібну версію php ...

Попередження: mysql_connect (): Невідповідність заголовків та незначної версії бібліотеки клієнта.  Заголовки: 50547 Бібліотека: 50628 на chennaitechnologies.com

Напр. Поточна версія PHP:

Версія PHP [5.2] (список доступних версій PHP 5.2, 5.3, 5.4, 5.5, 5.6)

Попередження: Зміна php-модулів та параметрів php за допомогою PHP Selector для рідної версії php неможлива

Я вибрав версію 5.6 php, після того як ця помилка була усунена на моєму сайті блогу WordPress ...


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


0

Для WHM та cPanel деякі версії повинні явно встановити mysqli для побудови.

Використовуючи WHM, під CENTOS 6.9 xen pv [dc] v68.0.27, потрібно було відновити Apache / PHP, переглянувши всі опції та вибравши mysqli для побудови. За замовчуванням було створено застарілий mysql. Тепер повідомлення про амортизацію зникли, і одне готове до майбутніх оновлень MySQL.


0

Я натрапив на те саме питання на 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

0

Моя хостингова компанія сказала мені виправити це шляхом деактивації "mysqli" та активації "nd_mysqli" у розширеннях php.

Помилка зникла, але я не маю знань, щоб зрозуміти, чи це правильний спосіб виправити це.


-1

Зміна версії PHP з 5.6 на 5.5 Виправлено .

Вам потрібно перейти до панелі керування> CGI Script і змінити там версію PHP.


Ми всі намагаємось перейти на останню версію, не повертаючись до версій.
karmafunk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.