Несоответствие второстепенных версий заголовков и клиентской библиотеки

В 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 

Ваш 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 

Ура!


[update: дополнительная информация] Установка этого драйвера также разрешает проблему 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-клиента (это означает, что версия MySQL установлена ​​неактуальна), а не обновление (в CentOS этот пакет указан как mysqlclientXX , где XX представляет номер пакета). Это также позволяет поддерживающему пакету поддерживать более низкие версии MySQL. Это грязный способ сделать это, но это был единственный способ, с помощью которого PHP и MySQL используют различное лицензирование.

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

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

Чтобы скомпилировать 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 …

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

в

 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

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

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

Предупреждение: mysql_connect (): несогласование малой версии заголовков и клиентской библиотеки. Заголовки: 50547 Библиотека: 50628 в chennaitechnologies.com

Например. Текущая версия PHP:

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

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

Я выбрал версию 5.6 php, после того, как эта ошибка была очищена на моем блоге блога 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 

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

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

Я получил это сообщение после того, как обновился до последней версии WordPress. Просто позвоните в свою хостинговую компанию, и они будут обновлять версию 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 .