Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum schlägt MySQL_connect() mit „OK-Paket 6 Bytes kürzer als erwartet' fehl, wenn von PHP 5.3.0 aus eine Verbindung zu einer entfernten MySQL 5.0.22-Datenbank hergestellt wird?

Susan Sarandon
Freigeben: 2024-11-07 05:10:02
Original
165 Leute haben es durchsucht

Why does MySQL_connect() fail with

MySQL PHP-Inkompatibilität: Den Fehler verstehen

Das in der Frage beschriebene Problem tritt auf, wenn versucht wird, von einer lokalen Datenbank aus eine Verbindung zu einer entfernten MySQL-Datenbank herzustellen WAMP-Installation mit PHP 5.3.0. Während die Verbindung zu einer Datenbank mit MySQL 5.0.45 erfolgreich ist, führt die Verbindung zu einer Datenbank mit Version 5.0.22 zu folgendem Fehler:

Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected. PID=5880 in ...
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in ...
Nach dem Login kopieren

Erklärung

Die Hauptursache für diese Inkompatibilität liegt in der Passwortlänge des für die Verbindung verwendeten MySQL-Kontos. Normalerweise verwendeten MySQL-Konten, die mit älteren Versionen erstellt wurden, 16-stellige Passwörter. Allerdings unterstützen neuere Versionen von PHP, wie PHP 5.3.0, die Authentifizierung mit diesen alten Passwörtern nicht mehr.

Lösung

Um das Problem zu beheben, das Passwort für Das betroffene MySQL-Konto muss mit einem Befehl wie dem folgenden zurückgesetzt werden:

SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
Nach dem Login kopieren

Zusätzlich ist es ratsam zu prüfen, ob der Server so konfiguriert ist, dass er standardmäßig alte Passwörter verwendet oder erstellt.

Diagnoseabfrage

Zur weiteren Diagnose des Problems kann die folgende Abfrage auf dem problematischen MySQL-Server ausgeführt werden, um die Passwortlänge zu ermitteln:

SELECT
  Length(`Password`),
  Substring(`Password`, 1, 1)
FROM
  `mysql`.`user`
WHERE
  `user`='username'
Nach dem Login kopieren

Ersetzen Sie „Benutzername“ durch Der tatsächliche Benutzername, der für die Datenbankverbindung verwendet wird, liefert Informationen über die Länge des Passworts und das erste Zeichen des Passworts, was bei der Bestätigung helfen kann, ob es sich um ein Passwort im alten Stil handelt.

Das obige ist der detaillierte Inhalt vonWarum schlägt MySQL_connect() mit „OK-Paket 6 Bytes kürzer als erwartet' fehl, wenn von PHP 5.3.0 aus eine Verbindung zu einer entfernten MySQL 5.0.22-Datenbank hergestellt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!