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
- Ubuntu imageMagick non converte PDF in PNG da www-data (php)
- apache2 su ubuntu - download di file php
- Wildcard Laravel Homestead e Nginx sottodominio
- Non è ansible installare PHPUnit via PEAR, richiede PEAR Installer> = 1.9.2, non è ansible aggiornare PEAR da 1.9.0
- PHP setlocale () non funziona per il controllo ctype_alpha
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
Esegui con un livello di segnalazione degli errori più basso:
$err_level = error_reporting(0); $conn = mysql_connect('params'); error_reporting($err_level);
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 …
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.
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
.