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

71

В 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
  • 0
    вам также придется обновить материал MySQL. MySQL-клиент или что-то еще.
  • 0
    @MarcB У меня должны быть все последние версии пакета MySQL (см. Мое последнее редактирование)
Показать ещё 5 комментариев
Теги:
mysqli
warnings

12 ответов

28
Лучший ответ

Ваш 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 /. , Однако я не уверен, что это самый безопасный путь, поэтому я не хочу использовать его в качестве ответа. Спасибо за вашу помощь.
118

Я использую MariaDB и имею аналогичную проблему.

Из сайта MariaDB, рекомендуется исправить его

  • Переключитесь на использование драйвера mysqlnd в PHP (рекомендуемое решение).
  • Запуск с более низким уровнем отчетности об ошибках:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  • Перекомпилируйте PHP с клиентскими библиотеками MariaDB.
  • Используйте свою оригинальную клиентскую библиотеку 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);
  • 3
    Спасибо за советы, это отлично сработало для меня с MariaDB
  • 4
    Это должно быть ответом, так как это работает и с MySQL
Показать ещё 7 комментариев
66

Для нового семейства MySQL 5.6 вам необходимо установить php5-mysqlnd, а не php5-mysql.

Удалите эту версию драйвера mysql

sudo apt-get remove php5-mysql

И установите это вместо

sudo apt-get install php5-mysqlnd
  • 9
    Пожалуйста, объясните ваш ответ. Вещи как то, что делают эти пакеты.
  • 4
    Для нового семейства MySQL 5.6 вам нужно установить php5-mysqlnd, а не php5-mysql.
Показать ещё 6 комментариев
21

То же самое работает для MySQL:

sudo apt-get install php5-mysqlnd

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

  • 1
    это решило мою проблему!
  • 0
    хорошее исправление для меня, после чего sudo systemctl перезапустите mysql sudo systemctl перезапустите apache2
Показать ещё 1 комментарий
8

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

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

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

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.

  • 0
    Ваш ответ был так ценен для меня. В нем я прочитал, что для правильного использования скомпилированного драйвера мне пришлось использовать ОБА - параметры --with-mysql и --with-mysqli . Поэтому на этот раз я снова выполнил команду configure с помощью: `--with-mysql = / home / stephane / Programs / mariadb / install \ --with-mysqli = / home / stephane / Programs / mariadb / Install / bin / mysql_config` и проблема была решена. Теперь он использует правильную версию клиента MariaDB.
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
1

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

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

Изображение 3940

Eg. Текущая версия PHP:

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

Предупреждение. Изменение php-модулей и php-параметров с помощью PHP-селектора для собственной версии php невозможно

Я выбрал версию 5.6 php, после того, как эта ошибка была очищена на моем блоге блога Wordpress...

1

Я получил тот же php, что и в моем wordpress сайте...

Err: Предупреждение: mysql_connect(): несогласование малой версии заголовков и клиентской библиотеки. Заголовки: 50547 Библиотека: 50628 в /home/lhu/public _html/innovacarrentalschennai.com/wp-includes/wp-db.php в строке 1515

Причина. Я обновил версию версии 4.2 до 4.5 (несоответствие PHP и MySql).

Я изменил wp-db.php в строке 1515

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

to

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

0

Кажется, у меня была одна и та же проблема, и это похоже на проблему с сервером. Все, что я сделал, это перейти к 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.

0

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

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

-2

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню