Wiem, że jest mnóstwo podobnych pytań, w rzeczywistości przeczytałem wszystkie (9) z nich.PHP 5.4 PDO nie mógł połączyć się z MySQL 4.1+ przy użyciu starego, niezabezpieczonego uwierzytelnienia.
Jednak żaden z nich nie rozwiązuje mojego problemu.
Mam pakiet dzielonego hostingu (minimum). Do mojego pakietu dołączona jest nazwa domeny i oddzielny adres IP, na którym hostowany jest serwer MySQL. Do rozwoju używam wersji http://localhost/
z serwerem rozwojowym PHP 5.4 i używam serwera MySQL, który dostaję w swoim pakiecie hostingowym.
Problem pojawia się tylko na moim komputerze, ponieważ zainstalowałem PHP 5.4, ale mój host sieciowy zainstalował PHP 5.2.17 i nie będzie aktualizowany. Serwer MySQL znajduje się na MySQL 5.1.50.
Na szczęście phpMyAdmin ma wbudowaną funkcję "Zmień hasło".
Istnieją dwie opcje mieszaja w phpMyAdmin do zmiany hasła:
- MySQL 4.1+
- MySQL 4.0 kompatybilny
Zmieniłem hasło z opcją MySQL 4.1 lub nowszym oraz potwierdziło, że aktualizacja się powiodła.
Profil został zaktualizowany.
SET PASSWORD = PASSWORD('***')
Jednak, kiedy wykonać to zapytanie:
SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));
Mówi mi długość hasła jest nadal 16. Wyjście:
1 1 16
A więc problem utrzymuje się.
Nie można połączyć się z bazą danych. SQLSTATE [HY000] [2000] mysqlnd nie może połączyć się z MySQL 4.1+ przy użyciu starego niezabezpieczonego uwierzytelniania. Użyj narzędzia administracyjnego, aby zresetować hasło za pomocą komendy SET PASSWORD = PASSWORD ("twoje_pozwolone_hasło"). Spowoduje to zapisanie nowej, bezpieczniejszej wartości skrótu w mysql.user. Jeśli użytkownik ten jest używany w innych skryptów wykonywanych przez PHP 5.2 lub starszej może trzeba usunąć starą flagę-haseł z pliku my.cnf
Próbowałem też zrobić te pytania, po zalogowaniu się z użytkownik DBO w phpMyAdmin:
SET SESSION old_passwords=0;
[phpMyAdmin reloads to the home screen, but the value remains = 1]
SET GLOBAL old_passwords = 0;
#1227 - Access denied; you need the SUPER privilege for this operation
FLUSH PRIVILEGES;
#1227 - Access denied; you need the RELOAD privilege for this operation
jest to sprzeczne z tym, co stwierdzono w menu witryną za ustawienie użytkownika DBO:
Database Właściciel
po utworzeniu nowej bazy danych, y musisz określić użytkownika bazy danych (DBO), który będzie mieć pełny dostęp administratora do bazy danych.
Czy jest to coś, z czym muszę się uporać z serwerami internetowymi? Czy może to być rozwiązane przez mojego użytkownika DBO? W przeciwnym razie można go ominąć w PHP? (ponieważ działa z PHP 5.2.17, ale nie PHP 5.4)
Utknęły one na PHP 5.2.17 (2011-01-06) i MySQL 5.1.50 (2010-08-03) i nie zostaną uaktualnione? Powiedziałbym, przenieść się do nowego hosta. Mimo to, zawsze powinieneś rozwijać i testować lokalnie z tymi samymi wersjami, do których się używasz, aby uniknąć tego rodzaju problemów. –