Ich habe eine Funktion geschrieben, die von einer PHP-Webseite verwendet wird, um mit einer MySQL-Datenbank zu interagieren. Wenn ich sie auf meinem Server teste, erhalte ich folgende Fehlermeldung:
"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)"
Ich kann sie auf meinem PC verwenden (mit XAMPP), und ich kann mithilfe der Befehlszeile im Server durch die Tabellen der Datenbank navigieren. Die Webseite kann jedoch keine Verbindung herstellen. Ich habe das Passwort geprüft, jedoch ohne Ergebnis. Es ist korrekt (sonst konnte ich mich nicht von der Kommandozeile aus bei mysql anmelden).
Der Aufruf der Funktion ist folgender:
$conn = new mysqli("localhost", "root", "password", "shop");
Muss ich etwas auf meinem Server einstellen? Vielen Dank
Edit: PHP version 5.3.3-7 + squeeze1 Mysql version: 5.1.49-3 Beide auf debian
Ich habe das so gelöst: Ich habe mich mit root Benutzername angemeldet
mysql -u root -p -h localhost
Ich habe einen neuen Benutzer mit erstellt
CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';
dann habe ich die Datenbank erstellt
CREATE DATABASE shop;
Ich habe Berechtigungen für neue Benutzer für diese Datenbank erteilt
GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';
Dann habe ich root abgemeldet und einen neuen Benutzer angemeldet
quit;
mysql -u francesco -p -h localhost
Ich habe meine Datenbank mit einem Skript neu aufgebaut
source shop.sql;
Und das wars .. Jetzt funktioniert PHP ohne Probleme mit dem Anruf
$conn = new mysqli("localhost", "francesco", "some_pass", "shop");
Vielen Dank an alle für deine Zeit :)
Gibt es in der DB einen Benutzerkontoeintrag für root @ localhost? In MySQL können Sie verschiedene Benutzerkontoberechtigungen nach Host festlegen. Es können mehrere verschiedene Konten mit demselben Namen mit dem Host verbunden sein, mit dem sie sich verbinden. Die häufigsten sind [email protected] und root @ localhost. Diese können unterschiedliche Passwörter und Berechtigungen haben. Stellen Sie sicher, dass root @ localhost vorhanden ist und die erwarteten Einstellungen hat.
Ich bin bereit zu wetten, basierend auf Ihrer Erklärung, dass dies das Problem ist. Die Verbindung von einem anderen PC aus verwendet ein anderes Konto als root @ localhost und die Befehlszeile, von der ich denke, dass sie mit [email protected] verbunden wird.
Nach dem, was Sie bisher gesagt haben, klingt es nach einem Problem, bei dem der MySQL-Treiber in PHP5.3 Probleme hat, eine Verbindung zur älteren MySQL-Version 4.1 herzustellen. Werfen Sie einen Blick auf http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx
Hier gibt es eine ähnliche Frage mit einigen nützlichen Antworten: Kann keine Verbindung zu MySQL 4.1+ mit alter Authentifizierung herstellen
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
Dies gibt 16 für Konten mit alten Kennwörtern und 41 für Konten mit neuen Kennwörtern zurück (und 0 für Konten ohne Kennwort, die Sie möglicherweise auch beachten sollten) . Verwenden Sie entweder die Tools zur Benutzerverwaltung des MySQL-Frontends (falls vorhanden) oder
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
Ich hatte auch dieses Problem. Dies war jedoch aus einem anderen Grund. Mein Passwort begann mit dem Zeichen $
... $MyPassword
Ich habe es in #MyPassword
geändert und das Problem ist gelöst.
SPITZE:
Kommentieren Sie die PID- und Socket-Datei aus, wenn Sie keine Verbindung mit dem Server herstellen können. linie es "sieht aus" an der falschen PID/Socket-Datei ...
### Kommentieren Sie die PID- und Socket-Datei aus, wenn Sie keine Verbindung zum Server herstellen können.
# pid-file =/var/run/mysql/mysqld.pid # socket =/var/lib/mysql/mysql.sock
Bearbeiten Sie Ihre Berechtigungen unter PHPmyAdmin (WAMP). Beachten Sie, dass Ihr Kennwort und Ihr Benutzername nicht erstellt wurden. Erstellen oder bearbeiten Sie es also, damit es mit Ihrer SQL-Verbindung in Ihrem PHP funktioniert. Hoffe, es funktioniert
Möglicherweise ist dort kein Passwort festgelegt und Sie übergeben ein Passwort als Argument. Versuchen Sie, das Kennwortargument während der Verbindung nicht anzugeben.
Höchstwahrscheinlich identifiziert es Ihren Benutzer nicht richtig. root @ localhost . Wählen Sie die Mysql-Version aus, die Ihr MAMP verwendet.
/Applications/MAMP/Library/bin/mysqldump -uroot -p db_name > test_db_dump.sql
Ich habe tatsächlich einen Alias auf meinem Computer geschrieben, sodass ich mich nicht daran erinnern muss, wie ich in das bin-Verzeichnis komme.
alias mysqldumpMAMP='/Applications/MAMP/Library/bin/mysqldump'
Damit kann ich das ausführen:
mysqldumpMAMP -uroot -p db_name > test_db_dump.sql
Sie können einen Alias in Ihrem Bash-Profil ~/.bash_profile
oder ~/.bash_rc
speichern.
Einfach.
Öffnen Sie das Xampp-Kontrollfeld -> Konfig -> Meine.ini-Bearbeitung mit Notepad. füge dies jetzt unter [mysqld] hinzu
skip-grant-tables
Sparen. Starten Sie Apache und MySQL.
Ich hoffe dir helfen