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 ...
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')
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'
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!