Mancata corrispondenza della versione secondaria delle intestazioni e della libreria client

In PHP ricevo il seguente avviso each volta che provo a connettermi a un database (tramite mysql_connect )

Avviso: mysql_connect (): mancata corrispondenza tra versione secondaria delle intestazioni e della libreria client. Intestazioni: 50162 Libreria: 50524

Nel mio output php -i ho i seguenti valori elencati sotto mysqli

Versione della libreria API client => 5.5.24

Versione dell'intestazione dell'API client => 5.1.62

Ho provato ad aggiornare php5-mysql e php ma sono già all'ultima versione di entrambi. Come faccio ad aggiornare la versione dell'intestazione, quindi smetto di vedere questo avviso?

MODIFICARE

I miei file MySQL dovrebbero essere tutti aggiornati per essere l'ultima versione:

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

Rimozione di vecchie versioni

 $ 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 

Il tuo PHP è stato compilato con MySQL 5.1 ma ora sta collegando una libreria mysql della famiglia 5.5.X. Devi aggiornare PHP a una versione compilata con MySQL 5.5 o ripristinare le librerie client mysql a 5.1.x.

Sto usando MariaDB e ho il problema simile.

Dal sito MariaDB , si consiglia di risolverlo con

  1. Passare a utilizzare il driver mysqlnd in PHP (soluzione consigliata).
  2. Esegui con un livello di segnalazione degli errori più basso:

     $err_level = error_reporting(0); $conn = mysql_connect('params'); error_reporting($err_level); 
  3. Ricompila PHP con le librerie client MariaDB.
  4. Usa la tua libreria client MySQL originale con MariaDB.

Il problema è stato risolto utilizzando il driver mysqlnd in Ubuntu:

 sudo apt-get install php5-mysqlnd 

Saluti!


[aggiornamento: informazioni aggiuntive] L'installazione di questo driver risolve anche il problema PDO il quale valore integer viene restituito come una string. Per mantenere integer come è, dopo aver installato mysqlInd, fare questo

 $db = new PDO('mysql:host='.$host.';dbname='.$db_name, $user, $pass, arrays( PDO::ATTR_PERSISTENT => true)); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); 

Per la nuova famiglia di MySQL 5.6 è necessario installare php5-mysqlnd, non php5-mysql.

Rimuovi questa versione del driver mysql

 sudo apt-get remove php5-mysql 

E installa invece questo

 sudo apt-get install php5-mysqlnd 

Lo stesso funziona per MySQL:

 sudo apt-get install php5-mysqlnd 

Ho letto questo thread cercando di trovare la soluzione per MySQL, e ho anche visto la risposta di Ken, ma ho ignorato la soluzione per MariaDB, sprecando alcune ore in questo modo. Non è chiaro per me che lo stesso possa valere per MySQL. Questo post è solo per risparmiarti le poche ore che ho perso.

Il motivo alla base di questo errore è che il PHP si è separato dalle librerie MySQL Client qualche tempo fa. Quindi, ciò che sta accadendo (principalmente su vecchie compilazioni di linux) è che le persone compilano PHP contro una determinata build del client MySQL (ovvero la versione di MySQL installata è irrilevante) e non l'aggiornamento (in CentOS questo pacchetto è elencato come mysqlclientXX , where XX rappresenta il numero del pacchetto). Ciò consente anche al maintainer del pacchetto di supportre versioni inferiori di MySQL. È un modo disordinato per farlo, ma era l'unico modo dato come PHP e MySQL utilizzano licenze diverse.

MySQLND risolve il problema utilizzando il driver nativo di PHP (ND), che non si basa più su MySQL Client. È anche compilato per la versione di PHP che stai utilizzando. Questa è una soluzione migliore in tutto, se non altro per cui MySQLND è fatto per avere PHP parlare con MySQL.

Se non è ansible installare MySQLND, è ansible ignorare in modo sicuro questo errore per la maggior parte. È solo più di una nota FYI di qualsiasi altra cosa. Sembra solo spaventoso.

Per compilare php dal sorgente con il driver nativo 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 

Da /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 

È ansible includere una o più estensioni PHP MySQL utilizzando queste opzioni.
Se un valore non viene passato a queste opzioni, o se il valore è mysqlnd , verrà utilizzato il driver nativo MySQL.

Ho avuto lo stesso php warring nel mio sito wordpress …

Err: Avviso: mysql_connect (): mancata corrispondenza della versione secondaria delle intestazioni e della libreria client. Intestazioni: 50547 Libreria: 50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php on line 1515

Causa: ho aggiornato la versione da 4.2 a 4.5 del wp (mancata corrispondenza tra PHP e MySql)

Ho cambiato wp-db.php sulla row 1515

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

a

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

È senza errori warring sul mio sito wordpress

Se avessi accesso al cpanel o al whm per il web hosting del dominio …

In cPanel, vai alla scheda "Software e servizi" >>, quindi fai clic su "Seleziona versione PHP" >> imposta la versione desiderata di php …

Avviso: mysql_connect (): mancata corrispondenza tra versione secondaria delle intestazioni e della libreria client. Intestazioni: 50547 Libreria: 50628 in chennaitechnologies.com

Per esempio. Versione PHP corrente:

Versione PHP [5.2] (elenco delle versioni di php disponibili in 5.2, 5.3, 5.4, 5.5, 5.6)

Attenzione: la modifica dei moduli php e delle opzioni php tramite PHP Selector per la versione nativa di php è imansible

Ho selezionato la versione 5.6 di php, dopo che l'errore è stato cancellato sul mio sito blog wordpress …

 Warning: mysqli::mysqli(): Headers and client library minor version mismatch. Headers:50547 Library:100026 

Ho risolto l'errore sopra riportto semplicemente ricostruendo il mio Apache:

 cPanel Version 56.0 (build 25) Apache Version 2.4.18 PHP Version 5.5.30 MySQL Version 10.0.26-MariaDB 

Ho questo problema quando uso Percona / MySQL 5.6 e il driver php è stato compilato con 5.5 e php5-mysql è richiesto per alcune app, quindi scrivo uno script per ribuild i driver.

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

Ho ricevuto questo messaggio dopo l'aggiornamento all'ultima versione di WordPress. Basta call la tua compagnia di hosting e aggiorneranno la versione di PHP. Il problema sarà risolto in pochi minuti.

Mi sembra di aver avuto lo stesso problema e questo sembra essere un problema del server. Tutto quello che ho fatto è andare su your-wordpress-folder/wp-includes/wp-db.php cercare mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags ); linea. Il mio era sulla line 1489 , line 1489

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

cioè basta aggiungere @ appena prima del mysqli .