2009-03-20 18 views
7

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:kann nicht mit mysql mit PHP verbinden

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

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

+0

Wie haben Sie das Privileg gewährt? Das Problem ist in diesem Fall nicht der PHP-Code, sondern das mysql-Ende. Die connect-Anweisung ist korrekt. –

Antwort

13

Ich habe eine Ahnung, dass das Problem hier der Host ist, dem Sie es gewährt haben, obwohl es wirklich nicht mehr als eine ermittelte Schätzung ist. Wenn Sie den Zugriff [email protected]'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, und in diesem Zusammenhang ist 127.0.0.1 nicht dasselbe wie localhost.

Vom manuellen Eingabe für mysql_connect():

Hinweis: Wenn Sie „localhost“ oder geben Sie „localhost: port“ als Server, die MySQL-Client-Bibliothek wird dieses außer Kraft setzen und versuchen, einen verbinden lokaler Socket (Named Pipe unter Windows). Wenn Sie TCP/IP verwenden möchten, verwenden Sie "127.0.0.1" anstelle von "localhost". Wenn die MySQL Client-Bibliothek versucht, eine Verbindung zum falschen lokalen Socket herzustellen, sollten Sie den korrekten Pfad als Laufzeitkonfiguration in Ihrer PHP-Konfiguration festlegen und das Feld leer lassen.

Hoffe, das ist nicht völlig redundant.:)

0

und gab es die richtigen Privilegien für die db

Wie? Welchen Host haben Sie für den Benutzer verwendet? Diese

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 anderen post)

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

0

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

Ich schlage vor, phpmyadmin nicht zu verwenden, aber eine Kopie von SQLYOG herunterzuladen (die freie Gemeinschaftsausgabe ist groß) und versuchen, sich mit Ihrem Benutzer über das zu loggen. Sobald Sie das Problem diagnostiziert haben, kopieren Sie den Benutzernamen/das Passwort in Ihr Skript.

Übrigens ist phpmyadmin in Ordnung, aber ein Programm wie sqlyog ist in der Regel bequemer, so lohnt sich auf jeden Fall - ich bin sicher, dass Sie konvertiert werden. Wenn sqlog nicht ganz Ihrem Geschmack entspricht, gibt es mehrere andere kostenlose und kommerzielle Alternativen.

5

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.

Es war schon immer das, was Emil zwei sagt. 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 über die Befehlszeile anmelden können, führen Sie diese Abfrage aus.

SELECT user, host FROM mysql.user 

sollten Sie 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.

die Host zurückgesetzt wird diese Abfragen ausgeführt werden (dies zu tun vorsichtig sein, Ihre für die gesamte MySQL-Installation mit dem privilages Arbeitstisch)

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

flush privileges; 

Wenn Sie einen Datensatz mit dem Benutzername und% als Gastgeber zu sehen, dass hat Vorrang vor allem anderen, wenn es mehrere Datensätze für den Benutzer und% als Host für einen von ihnen gibt, ist es möglich, dass der Benutzername mit% als Host das falsche Passwort hat und egal wie oft Sie das Passwort von username @ localhost zurücksetzen Es ist ungültig, weil es mit Benutzernamen @% bei der Anmeldung verglichen wird.

+0

Das war genau mein Problem, nur der Benutzername konnte sich immer anmelden, egal welche Privilegien ohne Passwort - aber wenn ein Pass zugewiesen wurde, würde es überhaupt nicht mit '%' als Host funktionieren. –

2

Wenn Sie Linux verwenden, verwenden Sie den synaptischen Paketmanager, 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 allein laufende PHP-Skripte 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.

+1

Ich habe einen LAMP Ubuntu Server installiert und mysql-core deinstalliert und dann neu installiert. Es hat php5-mysql auf dem Weg verloren und ein 'sudo apt-get install php5-mysql' hat mich wieder auf den Weg gebracht. – user898763452

2

In meinem Fall drehte es sich, ich hatte den Benutzer gelöscht, der verwendet wurde, um die Datenbank zu erstellen, die ich verwendete. 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.

+0

ähnliches problem: chris wingers antwort führte mich zu meiner lösung; Ich hatte meine gesicherte Datenbank (gesichert durch den Benutzer 'robert') auf einem anderen Entwicklungscomputer im Benutzerkonto 'iohann' installiert ...anderer Benutzername Also, alles, was ich bekommen würde, war kryptisch 500 Interner Serverfehler. Aber mit Herrn Winingers Notiz in der Hand, während ich als Benutzer "iohann" angemeldet war, habe ich die Datenbank auf dem neuen Rechner wiederhergestellt, sofort gesichert und dann wiederhergestellt. Alles summt nach. Ich würde liebend gerne erklären, warum das funktioniert hat. Offensichtlich etwas, was mit 'Benutzersignatur' auf dem Backup/der Datenbank zu tun hat. – amalafrida

0

Nach einem ähnlichen Problem fand ich, dass das Ersetzen von '127.0.0.1' durch 'localhost' den Trick (trotz der Tatsache, dass ich erfolgreich über das Terminal mit 'localhost' verbinden konnte).

0

Ich hatte das gleiche Problem, aber dann fand ich heraus, dass, wenn Sie in den Standard-Konten mit '%' (beliebiger Host), kein Passwort, dann können Sie nur nicht mit einem Passwort verbinden. Ich bin nicht sicher, was das Problem genau ist, aber das Entfernen von ihnen löste es.