Frage Header und Client-Bibliothek Nebenversionskonflikt


In PHP erhalte ich die folgende Warnung, wenn ich versuche, eine Verbindung zu einer Datenbank herzustellen (über mysql_connect)

Warnung: mysql_connect (): Header und Client-Bibliothek Nebenversion stimmen nicht überein. Kopfzeilen: 50162 Bibliothek: 50524

In meinem php -i Ausgabe Ich habe die folgenden Werte unter mysqli aufgelistet

Version der Client-API-Bibliothek => 5.5.24

Client-API-Headerversion => 5.1.62

Ich habe versucht, PHP5-MySQL zu aktualisieren und php aber ich bin schon bei der neusten Version von beiden. Wie gehe ich vor, um die Header-Version zu aktualisieren, damit ich diese Warnung nicht mehr sehen kann?

BEARBEITEN

Meine MySQL-Dateien sollten alle auf die neueste Version aktualisiert werden:

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

Alte Versionen entfernen

$ 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

75
2018-05-25 18:06


Ursprung


Antworten:


Ihr PHP wurde mit MySQL 5.1 kompiliert, aber jetzt verbindet es eine MySQL-Bibliothek der 5.5.X-Familie. Sie müssen PHP auf eine Version aktualisieren, die mit MySQL 5.5 kompiliert wurde, oder mysql-Client-Bibliotheken auf 5.1.x zurücksetzen.


30
2018-05-26 18:29



Ich benutze MariaDB und habe das ähnliche Problem.

Von MariaDB WebsiteEs wird empfohlen, es zu beheben

  1. Wechseln Sie zur Verwendung des mysqlnd-Treibers in PHP (empfohlene Lösung).
  2. Führen Sie eine niedrigere Fehlerberichterstattungsstufe aus:

    $err_level = error_reporting(0);  
    $conn = mysql_connect('params');  
    error_reporting($err_level); 
    
  3. Kompilieren Sie PHP mit den MariaDB-Client-Bibliotheken neu.
  4. Verwenden Sie Ihre ursprüngliche MySQL-Client-Bibliothek mit der MariaDB.

Mein Problem wurde mit dem mysqlnd-Treiber in Ubuntu behoben:

sudo apt-get install php5-mysqlnd

Prost!


[update: extra information] Durch die Installation dieses Treibers wird auch das PDO-Problem gelöst, das den Integer-Wert als Zeichenfolge zurückgibt. Um den Typ nach der Installation von mysqlInd als Ganzzahl beizubehalten, führen Sie dies aus

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

119
2018-03-17 12:16



Für die neue MySQL 5.6-Familie müssen Sie php5-mysqlnd, nicht php5-mysql installieren.

Entfernen Sie diese Version des mysql-Treibers

sudo apt-get remove php5-mysql

Und installieren Sie das stattdessen

sudo apt-get install php5-mysqlnd

63
2017-08-11 15:51



Das Gleiche funktioniert für MySQL:

sudo apt-get install php5-mysqlnd

Ich habe diesen Thread gelesen, um die Lösung für MySQL zu finden, und ich habe auch die Antwort von ken gesehen, aber ich habe die Lösung für MariaDB ignoriert und ein paar Stunden damit verschwendet. Mir war nicht klar, dass das gleiche für MySQL gelten könnte. Dieser Beitrag soll nur die wenigen Stunden ersparen, die ich verloren habe.


22
2018-04-24 14:40



Der Hauptgrund für diesen Fehler ist, dass PHP sich vor einiger Zeit von den MySQL-Client-Bibliotheken getrennt hat. Also, was passiert (hauptsächlich auf älteren Kompiletten von Linux) ist, dass Leute PHP gegen kompilieren werden ein bestimmter Build des MySQL-Clients (was bedeutet, dass die installierte Version von MySQL irrelevant ist) und nicht upgraden (in CentOS ist dieses Paket aufgeführt als mysqlclientXX, woher XX steht für die Paketnummer). Dadurch kann der Paketverwalter auch niedrigere Versionen von MySQL unterstützen. Es ist ein chaotischer Weg, es zu tun, aber es war der einzige Weg, wie PHP und MySQL unterschiedliche Lizenzen verwenden.

MySQLND löst das Problem mit dem eigenen nativen Treiber (ND) von PHP, der nicht mehr auf MySQL Client angewiesen ist. Es ist auch für die von Ihnen verwendete PHP-Version kompiliert. Dies ist eine bessere Lösung überall, wenn aus anderen Gründen, dass MySQLND gemacht wird, PHP mit MySQL zu sprechen.

Wenn Sie MySQLND nicht installieren können, können Sie diesen Fehler tatsächlich größtenteils ignorieren. Es ist nur mehr eine Warnung für Sie als alles andere. Es klingt einfach gruselig.


9
2018-05-21 02:08



Um PHP aus der Quelle mit zu kompilieren MySQL nativer Treiber (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

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

Mit diesen Optionen können eine oder mehrere PHP MySQL-Erweiterungen eingebunden werden.
Wenn an diese Optionen kein Wert übergeben wird oder wenn der Wert ist mysqlndEs wird der native MySQL-Treiber verwendet.


2
2017-08-26 12:26



Ich habe denselben php Krieg in meiner Wordpress-Site ...

Err: Warnung: mysql_connect (): Header und Client-Bibliothek Nebenversion stimmen nicht überein. Kopfzeilen: 50547 Bibliothek: 50628 in /home/lhu/public_html/innovacarrentalschennai.com/wp-includes/wp-db.php in Zeile 1515

Ursache: Ich aktualisierte wp 4.2 zu 4.5 Version (PHP und MySql stimmen nicht überein)

Ich habe wp-db.php in Zeile 1515 geändert

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

zu

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

Es ist ohne Warring err auf meiner Wordpress-Site


1
2018-04-12 20:27