Frage

Ich kann nicht mit einem PHP-Skript zu verbinden scheinen MySQL, obwohl ich mit phpMyAdmin feinen verbinden kann. Ich habe einen Benutzer mit einem Passwort, und gab ihm die richtigen Privilegien für die db, aber jedes Mal wenn es verbindet sie stirbt sagen, den Zugriff verweigert. Ich benutze xampp auf einer Windows XP-Box. Firewalls sind deaktiviert, und ich habe den Benutzernamen nad Passwort korrekt sind geprüft. Hier ist der Code:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

Sie haben Benutzername in einem bestimmten Format oder etwas sein?

War es hilfreich?

Lösung

Ich habe das Gefühl, dass das Problem hier ist der Host Sie es gewährt, wenn es wirklich nicht mehr als eine Vermutung. Wenn Sie den Zugriff myuser@'127.0.0.1' gewähren oder den Server tatsächliche IP-Adresse, werden Sie nicht erlaubt werden, unter Verwendung von localhost als Host zu verbinden. Dies ist aufgrund der Tatsache, dass, wenn „localhost“ als Host angegeben wird, php davon aus, dass Sie einen Unix-Socket anstelle von Netzwerk-Sockets verwenden mögen, und in diesem Zusammenhang 127.0.0.1 ist nicht die gleiche wie localhost.

Von der manuellen Eingabe für mysql_connect () :

  

Hinweis: Jedes Mal, wenn Sie angeben, „localhost“   oder „localhost: port“ als Server, der   MySQL-Client-Bibliothek wird außer Kraft gesetzt   dies und versuchen, zu einem lokalen verbinden   Buchse (Named Pipe unter Windows). Wenn du   wollen TCP / IP, verwenden Sie "127.0.0.1" verwenden   anstelle von „localhost“. Wenn der MySQL   Client-Bibliothek versucht, das verbinden   falsch lokalen Socket, sollten Sie die Set   korrekter Pfad als Laufzeit-Konfiguration   in Ihrer PHP-Konfiguration und verlassen   der Server Feld leer.

Hope dies nicht völlig überflüssig ist. :)

Andere Tipps

ich das schon einmal gesehen, wo ein MySQL-Benutzer über php einloggt und andere nicht. Manchmal ist der Benutzer auch von der Kommandozeile funktioniert, aber nicht von PHP.

Es ist immer gewesen, was Emil zwei ist reffering. Ein MySQL-Benutzer ist wirklich Benutzer / Host-Paar. so dass der Benutzer MegaDots @ localhost und der Benutzer MegaDots @ mycoolhost sind in der mysql.user Tabelle aufgeführt als zwei getrennte Datensätze.

Wenn Sie von der Kommandozeile anmelden können diese Abfrage ausführen.

SELECT user, host FROM mysql.user

sollten Sie die vollständige Liste der Benutzer und thier Gastgeber sehen.

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

der Host laufen diese Abfragen zurückgesetzt (! Vorsichtig sein, dies zu tun Ihr mit dem privilages Tabelle arbeiten für die gesamte MySQL-Installation)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

Wenn Sie einen Datensatz mit dem Benutzernamen und% als Gastgeber zu sehen, die Vorrang vor allem anderen haben wird, wenn es mehrere Datensätze für den Benutzer und% als Host für eine von ihnen sind, ist es möglich, dass der Benutzername mit% als die Host hat das falsche Passwort und egal wie manytimes Sie username @ localhost das Passwort zurückzusetzen, es ist ungültig, weil sie zu username @% auf Login verglichen werden.

Wenn Sie Linux verwenden verwenden, um die synaptischen Paket-Manager zu finden und laden Sie alle Bibliotheken und Mods, die PHP und MySQL benötigen, damit sie beide verbinden. Mein Problem war, dass Skripte PHP läuft allein auf der Server-Seite gearbeitet, aber wenn ich PHP-Skripte versucht, mit zu MySQL verbinden es mir nur nicht in Verbindung bringen würde würde eine einfache weiße Seite. Dann bemerkte ich, ich habe nicht die MySQL-Client-Bibliotheken, die PHP MySQL conect verwendet. Ich hatte nur die MySQL-Server-Bibliotheken. Sobald ich die Client-Seite Bibliotheken installiert und neu gestartet den Apache-Server meiner PHP-Skripte hatte kein Problem zu verbinden. Standardmäßig PHP 5 kommt nicht installiert mit den MySQL-Client-Bibliotheken.

In meinem Fall ist es drehte ich den Benutzer gelöscht hatte, die verwendet wurde um die Datenbank zu erstellen I wurde mit. Normalerweise sollte dies den Fehler ‚Benutzer angegebene definer existiert nicht‘ geben, aber aus irgendeinem Grund zu meinem PHP-Code verweigert wurde es einfach Rückkehr der allgemeineren Zugang. Ich bin mir nicht sicher, warum ich immer noch über die Befehlszeile und andere Schnittstellen anmelden könnte. Zur Korrektur meines Problems, das ich den Benutzer neu erstellt, die gelöscht wurden.

Dies wird entweder ein Tippfehler sein oder Sie Privilegien nicht erteilt haben. Manchmal kann es erschreckend schwierig sein, diese zu erkennen.

Ich schlage vor, Sie phpMyAdmin nicht verwenden, aber eine Kopie von SQLyog (die kostenlose Community Edition herunterladen ist groß) und versuchen Sie mit Ihrem Benutzer über das einzuloggen. Sobald Sie das Problem haben diagnostiziert dort Kopieren / Einfügen Benutzername / Passwort an das Skript zurück.

Im Übrigen phpMyAdmin ist in Ordnung, aber ein Programm wie SQLyog ist in der Regel günstiger, so lohnt sich auf jeden Fall - ich bin sicher, dass Sie umgewandelt werde. Wenn SQLyog nach Ihrem Geschmack nicht ganz ist, gibt es mehrere andere freie und kommerzielle Alternativen.

  

und gab ihm die richtigen Privilegien für die db

Wie? Welche Gastgeber haben Sie dabei für den Benutzer, wenn er die Erteilung?

Dies ist, wie es ist in der Regel getan:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

in Ihrem Fall 'some' sollte wahrscheinlich 'localhost' oder '127.0.0.1' (siehe andere post)

Syntax-Referenz: http://dev.mysql.com/ doc / refman / 5.1 / de / grant.html

ein ähnliches Problem Nachdem fand ich, dass ‚127.0.0.1‘ mit dem Ersetzen ‚localhost‘ den Trick (trotz der Tatsache, dass ich in der Lage war erfolgreich über das Terminal verbinden ‚localhost‘ verwenden).

Ich hatte das gleiche Problem, aber dann ich herausgefunden, dass, wenn Sie in den Standardkonten mit ‚%‘ (jeder Host) verlassen, die Sie nicht dem Kennwort dann können einfach nicht mit einem Passwort verbinden. Ich bin nicht sicher, was genau das Problem ist aber das Entfernen sie es gelöst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top