Несоответствие младших версий заголовков и клиентской библиотеки

В PHP я получаю следующее предупреждение, когда пытаюсь подключиться к базе данных (через mysql_connect)

Предупреждение: mysql_connect(): Несоответствие версий заголовков и клиентской библиотеки. Заголовки:50162 Библиотека:50524

В моем php -i Вывод У меня есть следующие значения, перечисленные в MySQL

Версия клиентской библиотеки 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

17 ответов

Решение

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

Я использую 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);

Для нового семейства 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, и я также видел ответ Кена, но я проигнорировал решение для MariaDB, тратя таким образом несколько часов. Мне не было ясно, что то же самое может относиться к MySQL. Этот пост просто избавит вас от нескольких часов, которые я потерял.

Основной причиной этой ошибки является то, что некоторое время назад PHP отделился от клиентских библиотек MySQL. Итак, что происходит (в основном на старых компиляторах linux), это то, что люди будут компилировать PHP для данной сборки MySQL Client (что означает, что установленная версия MySQL не имеет значения), а не для обновления (в CentOS этот пакет указан как mysqlclientXX, где XX представляет номер пакета). Это также позволяет сопровождающему пакета поддерживать более низкие версии MySQL. Это грязный способ сделать это, но это был единственный способ, учитывая, как PHP и MySQL используют разные лицензии.

MySQLND решает проблему, используя собственный собственный драйвер PHP (ND), который больше не зависит от MySQL Client. Он также скомпилирован для используемой версии PHP. Это лучшее решение, если по какой-либо другой причине MySQLND создан для взаимодействия PHP с MySQL.

Если вы не можете установить MySQLND, вы можете спокойно проигнорировать эту ошибку по большей части. Это всего лишь уведомление о вашем финансовом положении, чем что-либо еще. Это просто звучит страшно.

Моя хостинговая компания посоветовала мне исправить это, отключив mysqli и активировав nd_mysqli в расширениях php.

Ошибка исчезла, но у меня нет знаний, чтобы понять, правильный ли это способ исправить это.

Чтобы скомпилировать 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 родной драйвер будет использоваться.

Я получил тот же 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 сайте

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

Если бы у вас был доступ к 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...

Работает для Mariadb 10.6.4-MariaDB, php56w, на centos 7.7

  1. yum удалить php56w-mysqli
  2. yum установить php56w-mysqlnd

Для WHM и cPanel в некоторых версиях нужно явно установить mysqli для сборки.

Используя WHM под CENTOS 6.9 xen pv [dc] v68.0.27, нужно было перестроить Apache/PHP, посмотрев на все опции и выбрав mysqli для сборки. По умолчанию было построено устаревшее mysql. Теперь сообщения об устаревании пропали, и один готов к будущим обновлениям MySQL.

Я столкнулся с той же проблемой на 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

У меня возникают эти проблемы, когда используется Percona/MySQL 5.6 и драйвер php был скомпилирован с 5.5, а для некоторых приложений требуется php5-mysql, поэтому я пишу скрипт для перестройки драйверов.

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

Изменение версии PHP с 5.6 до 5.5 Исправлено.

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

Кажется, у меня была такая же проблема, и это, похоже, проблема с сервером. Все, что я сделал, это пошел в your-wordpress-folder/wp-includes/wp-db.php искать mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );линия. Мой был на line 1489измените его на

@mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

т.е. просто добавь @ как раз перед mysqli,

Я получил это сообщение после обновления до последней версии WordPress. Просто позвоните в свою хостинговую компанию, и они обновят версию PHP. Проблема будет решена в течение нескольких минут.

Другие вопросы по тегам