W PHP za każdym razem, gdy próbuję połączyć się z bazą danych (przez mysql_connect
), otrzymuję następujące ostrzeżenie
Ostrzeżenie: mysql_connect (): Niezgodność nagłówków i wersji pomocniczej biblioteki klienta. Nagłówki: 50162 Biblioteka: 50524
W moim php -i
wyniku mam następujące wartości wymienione w mysqli
Wersja biblioteki API klienta => 5.5.24
Wersja nagłówka API klienta => 5.1.62
Próbowałem zaktualizować php5-mysql i php, ale mam już najnowszą wersję obu z nich. Jak mam zaktualizować wersję nagłówka, aby przestać widzieć to ostrzeżenie?
EDYTOWAĆ
Wszystkie pliki MySQL powinny zostać zaktualizowane do najnowszej wersji:
$ 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.
Usuwanie starych wersji
$ 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
Odpowiedzi:
Twoje PHP zostało skompilowane z MySQL 5.1, ale teraz łączy bibliotekę mysql z rodziny 5.5.X. Musisz zaktualizować PHP do wersji skompilowanej z MySQL 5.5 lub przywrócić biblioteki klienta mysql do wersji 5.1.x.
źródło
Używam MariaDB i mam podobny problem.
Ze strony MariaDB zaleca się naprawienie go przez
Uruchom z niższym poziomem raportowania błędów:
$err_level = error_reporting(0); $conn = mysql_connect('params'); error_reporting($err_level);
Mój problem został rozwiązany przy użyciu sterownika mysqlnd w Ubuntu:
Twoje zdrowie!
[aktualizacja: dodatkowe informacje] Zainstalowanie tego sterownika rozwiązuje również problem PDO, który zwraca wartość całkowitą jako łańcuch. Aby zachować typ jako liczbę całkowitą, po zainstalowaniu mysqlInd zrób to
$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);
źródło
W nowej rodzinie MySQL 5.6 musisz zainstalować php5-mysqlnd, a nie php5-mysql.
Usuń tę wersję sterownika mysql
Zamiast tego zainstaluj to
źródło
To samo działa dla MySQL:
Czytałem ten wątek, próbując znaleźć rozwiązanie dla MySQL, a także widziałem odpowiedź kena, ale zignorowałem rozwiązanie dla MariaDB, marnując w ten sposób kilka godzin. Nie było dla mnie jasne, że to samo może dotyczyć MySQL. Ten post jest tylko po to, by oszczędzić Ci straconych kilku godzin.
źródło
Głównym powodem tego błędu jest to, że PHP oddzieliło się jakiś czas temu od bibliotek klienta MySQL. Więc to, co się dzieje (głównie na starszych kompilacjach Linuksa), polega na tym, że ludzie będą kompilować PHP dla danej kompilacji klienta MySQL (co oznacza, że wersja zainstalowanego MySQL jest nieistotna) i nie będzie aktualizowana (w CentOS ten pakiet jest wymieniony jako
mysqlclientXX
, gdzieXX
reprezentuje numer pakietu). Pozwala to również opiekunowi pakietu na obsługę niższych wersji MySQL. Jest to trudny sposób, ale był to jedyny sposób, biorąc pod uwagę, w jaki sposób PHP i MySQL używają różnych licencji.MySQLND rozwiązuje problem, używając własnego natywnego sterownika PHP (ND), który nie polega już na kliencie MySQL. Jest również skompilowany dla używanej wersji PHP. Jest to lepsze rozwiązanie pod każdym względem, jeśli nie ma innego powodu, dla którego MySQLND jest stworzone do komunikacji PHP z MySQL.
Jeśli nie możesz zainstalować MySQLND, możesz w większości bezpiecznie zignorować ten błąd. To po prostu bardziej do Twojej wiadomości niż cokolwiek innego. Po prostu brzmi strasznie.
źródło
Aby skompilować php ze źródła z natywnym sterownikiem 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
Od
/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
Korzystając z tych opcji, można dołączyć jedno lub więcej rozszerzeń PHP MySQL.
Jeśli wartość nie zostanie przekazana do tych opcji lub jeśli wartość to
mysqlnd
, zostanie użyty natywny sterownik MySQL.źródło
--with-mysql
i--with-mysqli
opcji. Więc tym razem ponownie wykonałem polecenie konfiguracyjne: `--with-mysql = / home / stephane / Programs / mariadb / install \ --with-mysqli = / home / stephane / programy / mariadb / install / bin / mysql_config` i problem został rozwiązany. Teraz używa poprawnej wersji klienta MariaDB.Mam tę samą walkę z php na mojej stronie WordPress ...
Przyczyna: zaktualizowałem wersję wp 4.2 do 4.5 (niezgodność PHP i MySql)
Zmieniłem wp-db.php w linii 1515
$this->dbh = mysql_connect( $this->dbhost, $this->dbuser, $this->dbpassword, $new_link, $client_flags );
do
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 ); }
Dostał bez wojennego błędu na mojej stronie WordPress
źródło
Gdybyś miał dostęp do panelu cpanel lub whm do hostingu domeny ...
W cPanel przejdź do zakładki "Oprogramowanie i usługi", >> a następnie kliknij "Wybierz wersję PHP" >> ustaw żądaną wersję php ...
Na przykład. Aktualna wersja PHP:
Wersja PHP [5.2] (lista dostępnych wersji php 5.2, 5.3, 5.4, 5.5, 5.6)
Ostrzeżenie: zmiana modułów php i opcji php za pomocą selektora PHP dla natywnej wersji php jest niemożliwa
Wybrałem wersję 5.6 php, po usunięciu tego błędu na moim blogu wordpress ...
źródło
Warning: mysqli::mysqli(): Headers and client library minor version mismatch. Headers:50547 Library:100026
Rozwiązałem powyższy błąd, po prostu odbudowując mój Apache:
cPanel Version 56.0 (build 25) Apache Version 2.4.18 PHP Version 5.5.30 MySQL Version 10.0.26-MariaDB
źródło
Mam ten problem, gdy używam Percona / MySQL 5.6, a sterownik php został skompilowany z wersją 5.5, a niektóre aplikacje wymagają php5-mysql, więc piszę skrypt, aby odbudować sterowniki.
https://github.com/falcacibar/php5-mysql-rebuild
źródło
W przypadku WHM i cPanel niektóre wersje wymagają wyraźnego ustawienia mysqli do kompilacji.
Używając WHM, pod CENTOS 6.9 xen pv [dc] v68.0.27, trzeba było przebudować Apache / PHP, patrząc na wszystkie opcje i wybierając mysqli do zbudowania. Domyślnie było budowanie przestarzałego mysql. Teraz komunikaty o deprecjacji zniknęły, a jeden jest gotowy na przyszłe aktualizacje MySQL.
źródło
Napotkałem ten sam problem na centos7. Usunięcie php-mysql i zainstalowanie php-mysqlnd rozwiązało problem. Dzięki Carlosowi Buenosvinos Zamora za sugestię.
Oto moje polecenia dotyczące centos7 na wypadek, gdyby mogło to pomóc komukolwiek, ponieważ większość odpowiedzi tutaj opiera się na Debianie / Ubuntu.
Aby znaleźć zainstalowany pakiet php-mysql
yum list installed | grep mysql
Aby usunąć zainstalowany pakiet php-mysql
Aby zainstalować php-mysqlnd
źródło
Moja firma hostingowa kazała mi to naprawić, dezaktywując "mysqli" i aktywując "nd_mysqli" w rozszerzeniach php.
Błąd zniknął, ale nie mam wiedzy, aby zrozumieć, czy jest to właściwa metoda rozwiązania tego problemu.
źródło
Zmiana wersji PHP z 5.6 na 5.5 Naprawiono to .
Musisz przejść do panelu sterowania> Skrypt CGI i tam zmienić wersję PHP.
źródło