kann keine Verbindung zu mysql mit PHP herstellen

8

Ich kann nicht scheinen, mit mysql mit einem PHP-Skript zu verbinden, obwohl ich gut mit phpmyadmin verbinden kann. Ich habe einen Benutzer mit einem Passwort erstellt und ihm die richtigen Privilegien für die db gegeben, aber jedes Mal, wenn er sich verbindet, stirbt er mit dem Zugriff verweigert. Ich verwende XAMPP auf einer Windows XP-Box. Firewalls sind alle deaktiviert und ich habe den Benutzernamen und das Passwort überprüft. Hier ist der Code:

%Vor%

Müssen Benutzernamen in einem bestimmten Format oder etwas sein?

    
Chris Westbrook 20.03.2009, 22:50
quelle

8 Antworten

14

Ich habe eine Ahnung, dass das Problem hier der Gastgeber ist, dem Sie es zugestanden haben, obwohl es wirklich nicht mehr als eine fundierte Vermutung ist. Wenn Sie den Zugriff myuser@'127.0.0.1 'oder die tatsächliche IP-Adresse des Servers gewähren, können Sie keine Verbindung mit localhost als Host herstellen. Dies liegt daran, dass php bei der Angabe von "localhost" als Host davon ausgeht, dass Sie anstelle von Netzwerk-Sockets einen Unix-Socket verwenden wollen. In diesem Zusammenhang ist 127.0.0.1 nicht identisch mit localhost.

Aus dem manuellen Eintrag für mysql_connect () :

  

Hinweis: Immer wenn Sie "localhost" angeben   oder "localhost: port" als Server, der   Die MySQL-Client-Bibliothek wird überschrieben   dies und versuchen, eine Verbindung zu einem lokalen herzustellen   Socket (Named Pipe unter Windows). Wenn du   Möchten Sie TCP / IP verwenden, verwenden Sie "127.0.0.1"   anstelle von "localhost". Wenn die MySQL   Die Client - Bibliothek versucht, eine Verbindung zum   Falscher lokaler Socket, solltest du das einstellen   korrekter Pfad als Laufzeitkonfiguration   in Ihrer PHP-Konfiguration und verlassen   das Serverfeld leer.

Ich hoffe, das ist nicht völlig überflüssig. :)

    
Emil H 20.03.2009, 23:07
quelle
6

Ich habe das schon mal gesehen, wo sich ein MySQL-Benutzer über PHP anmeldet und ein anderer nicht. Manchmal arbeitet der Benutzer sogar von der Kommandozeile, aber nicht von PHP.

Emil hat immer zwei gesagt. Ein mysql-Benutzer ist wirklich ein Benutzer / Host-Paar. Die Benutzer megadots @ localhost und die Benutzer megadots @ mycoolhost werden in der Tabelle mysql.user als zwei separate Datensätze aufgelistet.

Wenn Sie sich über die Befehlszeile anmelden können, führen Sie diese Abfrage aus.

%Vor%

Sie sollten die vollständige Liste der Benutzer und deren Hosts sehen.

Wenn Sie den phpMyAdmin-Benutzer erkennen, der funktioniert, sehen Sie sich die Hostspalte an, die wahrscheinlich der Host ist, den Sie verwenden möchten.

Zum Zurücksetzen des Hosts führen Sie diese Abfragen aus (! Seien Sie vorsichtig, wenn Sie mit der privilages-Tabelle für die gesamte mysql-Installation arbeiten)

%Vor%

Wenn Sie einen Datensatz mit dem Benutzernamen und% als Host sehen, der Vorrang vor allem anderen hat, ist es möglich, dass, wenn mehrere Datensätze für den Benutzer und% als Host für einen von ihnen vorhanden sind, der Benutzername mit% as Der Host hat ein falsches Passwort und egal wie oft Sie das Passwort von username @ localhost zurücksetzen, es ist ungültig, weil es beim Anmelden mit dem Benutzernamen @% verglichen wird.

    
Fire Crow 21.03.2009 00:26
quelle
2

Wenn Sie Linux verwenden, verwenden Sie den synaptischen Paket-Manager, um alle Bibliotheken und Mods zu finden und herunterzuladen, die PHP und MySQL benötigen, damit sie sich verbinden können. Mein Problem war, dass PHP-Skripte alleine auf der Serverseite funktionierten, aber wenn ich versuchte, PHP-Skripte zu verwenden, um eine Verbindung zu MySQL herzustellen, würde es keine Verbindung herstellen. Ich würde nur eine einfache weiße Seite sehen. Dann bemerkte ich, dass ich nicht die MySQL-Client-Bibliotheken hatte, die PHP zur Verbindung mit MySQL verwendet. Ich hatte nur die MySQL-Server-Bibliotheken. Nachdem ich die clientseitigen Bibliotheken installiert und den Apache-Server neu gestartet hatte, konnte ich mit meinen PHP-Skripten keine Verbindung herstellen. Standardmäßig wird PHP 5 nicht mit den MySQL-Client-Seiten-Bibliotheken installiert.

    
hector 19.12.2011 21:27
quelle
2

In meinem Fall habe ich den Benutzer gelöscht, der zum Erstellen der Datenbank verwendet wurde. Normalerweise sollte dies den Fehler 'Benutzerdefinierter Definierer existiert nicht' enthalten, aber aus irgendeinem Grund wurde einfach der allgemeinere Zugriff auf meinen PHP-Code zurückgewiesen. Ich bin nicht sicher, warum ich mich immer noch über die Befehlszeile und andere Schnittstellen anmelden konnte. Um mein Problem zu beheben, habe ich den Benutzer neu erstellt, der gelöscht wurde.

    
Chris Wininger 14.07.2012 21:19
quelle
0

Dies ist entweder ein Tippfehler oder Sie haben keine Privilegien vergeben. Manchmal kann es alarmierend schwierig sein, diese zu erkennen.

Ich schlage vor, dass Sie nicht phpmyadmin verwenden, sondern eine Kopie von SQLYOG herunterladen (die kostenlose Community Edition ist großartig) und versuchen Sie es Melden Sie sich bei Ihrem Benutzer an. Sobald Sie das Problem diagnostiziert haben, kopieren Sie den Benutzernamen / das Passwort wieder in Ihr Skript.

Übrigens ist phpmyadmin in Ordnung, aber ein Programm wie sqlyog ist im Allgemeinen bequemer, also lohnt es sich, es trotzdem auszuprobieren - ich bin mir sicher, dass Sie konvertiert werden. Wenn sqlog nicht ganz Ihrem Geschmack entspricht, gibt es mehrere andere kostenlose und kommerzielle Alternativen.

    
Cruachan 20.03.2009 23:03
quelle
0
  

und gab ihm die richtigen Privilegien für die db

Wie? Welchen Host haben Sie für den Benutzer bei der Gewährung verwendet?

So wird es normalerweise gemacht:

%Vor%

sollte in Ihrem Fall 'somehost' wahrscheinlich 'localhost' oder '127.0.0.1' sein (siehe anderen Beitrag)

Syntaxreferenz: Ссылка

    
Fredrik 20.03.2009 23:01
quelle
0

Nachdem ich ein ähnliches Problem hatte, fand ich heraus, dass das Ersetzen von "127.0.0.1" durch "localhost" den Zweck erfüllte (trotz der Tatsache, dass ich erfolgreich über das Terminal mit 'localhost' verbunden werden konnte).

    
JMS 02.07.2013 19:30
quelle
0

Ich hatte das gleiche Problem, aber dann habe ich herausgefunden, dass wenn Sie die Standardkonten mit '%' (beliebiger Host), KEIN PASSWORT verlassen, dann können Sie einfach keine Verbindung mit einem Passwort herstellen. Ich bin nicht sicher, was das Problem genau ist, aber das Entfernen von ihnen löste es.

    
Erik Hosszú 26.02.2018 18:38
quelle

Tags und Links