2012-05-02 16 views
11

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)

+1

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. –

Odpowiedz

32

SOLVED!

Chociaż SET SESSION old_passwords=0; nie działa w phpMyAdmin.

Pobrałem MySQL GUI Tools i używane MySQL Query Browser do wykonania tego samego polecenia na non-DBO użytkownik:

SET SESSION old_passwords = 0;

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

teraz powrócił:

1  0  41 

So Po prostu zmieniłem hasło:

SET PASSWORD = PASSWORD('my_old_password')

A teraz PHP 5.4 PDO łączy się z bazą danych z tym użytkownikiem!

+2

To zadziałało dla mnie, świetny facet! – hiennt

+2

Tak, dobra robota :) Działa również dobrze poprzez konsolę mysql –

+1

Pracowałem także dla mnie! –

3

W phpMyAdmin ustawienie zmiennej sesji zadziała, ale wywołanie funkcji hasła musi wystąpić w tej samej sesji/wykonaniu.

Na przykład, jeśli wykonam:

SET SESSION old_passwords = 0; 
SET PASSWORD = PASSWORD('notagoodpassword'); 

będzie prawidłowo ustawić.

+0

Dobrze wiedzieć, że działa z PMA również – qdev

+0

Dziękuję bardzo :) wykonując obie pytania w tym samym czasie robiły mi jakąś sztuczkę, niż jakiekolwiek inne rozwiązanie. –

+0

To zadziałało dla mnie. Dzięki! :-) – Jacob

-1

to rozwiązanie działało: SET SESSION old_passwords = 0;

ALE: Musiałem później opuścić "stary" stół do robienia zdjęć i stworzyć nowy - wtedy zadziałało jak wdzięk.

Powiązane problemy